js 把一個函式賦給一個變數時帶括號與不帶括號的區別
function hi(){
var a = 1;
return function(){
console.log(a++);
};
};
var aaa = hi();
var bbb = hi;
aaa();
aaa();
bbb();
這段程式碼中 aaa與bbb的區別是什麼?
*****************************************************************************************************************************************************************************************
aaa
是將 hi()
的執行結果賦值給它,即 return
返回的匿名函式,此時有一個閉包,則每次呼叫 aaa
時都訪問的同一個 a
,aaa()
第一次執行結果為 1
,第二次為2
而 bbb
將是將 hi
這個函式名賦值給它,則呼叫 bbb()
後返回一個函式表示式,即function(){console.log(a++)};
bbb
就是hi
本身,換句話說就是外層的function。bbb()
的結果應該跟hi()
的結果一樣。
aaa
是hi()
呼叫之後返回的那個東西,也就是說它是裡層的function,a
aaa()
的呼叫結果是console.log(a++)
。
0
hi()是將hi函式執行之後返回 function(){console.log(a++)}
,這種返回值是函式的方法叫做函數語言程式設計,樓主可以查詢下相關的資料看看。
aaa 的值是 function(){console.log(a++)}
,而aaa再次執行的話就會打印出來a的值,這個地方可以看下上面那個hi函式,其中包含一個閉包,也就是說hi函式返回的function(){console.log(a++)}
這個函式會一直保持著對引用,也就是說每呼叫一次
aaa ,那麼列印的值都會加上1,關於具體的閉包,樓主還是可以自己查查資料
bbb 的值就是hi函式,這是一個普通的賦值操作