在JS

2016-04-30 49 views
0

調用關閉我在JS新手,並在這個JS閉合例子在JS

var add = (function() { 
    var counter = 0; 
    return function() {return counter += 1;} 
})(); 

我不知道爲什麼變量add分配給功能的調用,而不是函數本身。 換句話說,現在add是引用一個被調用的函數,並且調用add,我們不需要在末尾添加(),它已經被調用。 爲什麼這個例子像這樣調用它:add()?我無法找到它的確切名詞,但不是像'雙重調用'這個函數嗎?

+0

你能在問題本身提供代碼嗎? – evolutionxbox

+4

_「分配給函數的調用_」,沒有它被分配返回的函數表達式'function(){return counter + = 1;}' –

+0

由於JS關閉,返回的函數可以訪問活動計數器變量。這是JS最強大的功能之一。 – evolutionxbox

回答

0

看看這段代碼

function createCounter(){ 
    var index = 0; //initialize the index 
    //returns a closure that increments the index, 
    //and returns the value on every invocation 
    return function(){ return ++index; } 
} 

//crete an "instance" of a counter 
var aCounter = createCounter(); 
//and invoke it a few times 
console.log("a", aCounter()); 
console.log("a", aCounter()); 
console.log("a", aCounter()); 

//create another counter, and invoke it 
var anotherCounter = createCounter(); 
console.log("b", anotherCounter()); 
console.log("b", anotherCounter()); 

//showing that they increment independent of each other 
console.log("a", aCounter()); 
console.log("a", aCounter()); 

這將是一個「好」實施這一效用的,因爲你可以一遍又一遍使用它,不重複自己。

如果你直接調用createCounter,你會得到你的代碼示例。

var aCounter = (function(){ 
    var index = 0; 
    return function(){ return ++index } 
})();