2016-07-28 3 views
0

私はクロージャ機能について少し質問があります。私は以下の閉鎖機能があります。クロージャファンクション文が実行されていない

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

 
add();

をそれは、すべての文が実行されるので、初めての自己呼び出し機能ですが、私はreturn声明を除いて実行していない閉鎖文の中add()メソッドを呼び出すとき。

+2

あなたは何をしようとしていますか?閉鎖に応じてその動作は正しい –

+1

実際にはもっと情報が必要です。書かれているように、コードは大丈夫です。起動時にconsole.logが表示されます。そしてaddを呼び出すたびに、counter(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の機能を指し示す/参照しています。

2回目の実行では、add()を呼び出すときに、呼び出される内部関数を指していました。

関連する問題