2016-07-28 39 views
0

我有一個關於關閉函數的小問題。我有以下閉合功能:內部關閉函數語句不執行

var add = (function() { 
 
    var counter = 0; 
 
    console.log('Executed'); 
 
    return function() { 
 
    return counter += 1; 
 
    }; 
 
})(); 
 

 
add();

這是自調用函數,以便第一時間每個語句執行,但除了return語句時,我稱之爲封報表的內部add()方法不執行。

+2

你正在做什麼?它的行爲是正確的根據關閉 –

+1

確實需要更多的信息。正如所寫,代碼看起來不錯。在啓動時,您將獲得console.log。然後每次調用add時,它都會返回下一個計數器值(1,2,3,...)如果您的意思是每次調用add時都要執行console.log,只需將它移動到您返回的函數中。 – Shilly

回答

0

運行代碼片段後,請看一下日誌。

console.log('Before first execution.'); 
 
var add = (function() { 
 
    console.log('Inside First time execution'); 
 
    var counter = 0; 
 
    console.log('Executed'); 
 
    console.log('Returning a Funciton.'); 
 
    // Inner Function. 
 
    return function() { 
 
    console.log('Inner function called.') 
 
    return counter += 1; 
 
    } 
 
})(); 
 
console.log('End of first execution'); 
 
console.log('Start of second execution'); 
 
add(); 
 
console.log('End of second execution');

add()是自調用函數,立即得到。現在在調用時會返回一個函數。現在技巧是這個新返回的函數(可以說inner函數)被分配回變量add。所以現在這個add變成指向/參考此inner函數。

在第二次執行時,因此當您調用add()時,它一直指向被調用的內部函數。