1. 程式人生 > >js 把一個函式賦給一個變數時帶括號與不帶括號的區別

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 時都訪問的同一個 aaaa() 第一次執行結果為 1,第二次為2
而 bbb 將是將 hi 這個函式名賦值給它,則呼叫 bbb() 後返回一個函式表示式,即function(){console.log(a++)};

0

bbb就是hi本身,換句話說就是外層的function。bbb()的結果應該跟hi()的結果一樣。

aaahi()呼叫之後返回的那個東西,也就是說它是裡層的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函式,這是一個普通的賦值操作