今天學習jQuery拿一個功能做練習時,因為存在重復的代碼,所以寫了一個復用的函數提供調用
但是在調用函數的時候卻沒有起任何作用,經過檢查發現問題出現在調用函數時加了括號導致的
那么在調用函數時,加括號和不加括號有什么區別呢?於是通過搜索理解后得到了以下的結論:
先來看一段代碼:
function bracket() {
return 0;
}
// 函數后加括號
var a = bracket();
console.log(a); // 輸出0
// 函數后不加括號
var b = bracket;
console.log(b); // 輸出[Function: test]
其中"bracket"函數名是一個對象,而對象是保存在內存中,函數名是指向這個對象的指針。
var a = bracket() 函數后面加上括號就表示立即調用
var b = bracket 就是把"bracket"這個函數對象的指針指向b
那么什么時候需要加括號,什么時候不需要加括號呢?
函數只要是調用它進行執行的,都必須加括號。此時,函數實際上等於函數的返回值或者執行效果,當然有些沒有返回值,但已經執行了函數體內的行為。就是說:加括號的就代表將會執行函數體代碼。
不加括號的:都是把函數名稱作為函數的指針,一個函數的名稱就是這個函數的指針,此時不是得到函數的結果,因此不會執行函數體代碼。它只是傳遞了函數體所在的地址位置,在需要的時候好找到函數體去執行。
總結:
函數帶括號,會直接執行函數代碼體的內容。
函數不帶括號,則相當於一個指針,會指向函數,但是不執行函數體代碼內容,當符合函數執行條件的時候,再執行函數體代碼。