JavaScript 函式呼叫時帶括號和不帶括號的區別

衣舞晨風發表於2016-06-26
function fun() {
    return 1;
}
var a = fun;
var b = fun();

JavaScript中我們把下面的程式碼叫做函式:

function fun() {
    return 1;
}

函式是一種叫做function引用型別的例項,因此函式是一個物件。物件是儲存在記憶體中的,函式名則是指向這個物件的指標。

var a = fun 表示把函式名fun這個指標拷貝一份給變數a,但是這不是指函式本身被複制了一份。
即:a是fun函式,b是1

如果函式名後面加上圓括號就表示立即呼叫(執行)這個函式裡面的程式碼(花括號部分的程式碼)。

不加括號的,都是把函式名稱作為函式的指標,一個函式的名稱就是這個函式的指標,此時不是得到函式的結果,因為不會執行函式體程式碼。它只是傳遞了函式體所在的地址位置,在需要的時候好找到函式體去執行。

例如:

window.onload=init;

init函式並不會在這行程式碼時就執行,瀏覽器載入文件時這句話會被載入,會被告知文件載入完要執行哪個函式,但實際上沒有當時就執行,等到整個文件載入完成之後才會通過init這個指標去執行init()。

小注:本文部分內容參考:
https://www.zhihu.com/question/31044040
http://blog.csdn.net/yyx19941129/article/details/49642515

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章