2017-08-13 18 views
3
<script> 
    window.something = (function(){ 
     return function(x){ 
     console.log(x); 

     }; 


    })(); 

    something("hello"); 
</script> 

パラメータがないsomething関数内の関数に "hello"パラメータが渡されているのは不思議です。また、何か関数がすぐに実行されないのはなぜですか?その自己起動関数ですが、実行する前にまず呼び出さなければならないというのは不思議です。関数Aを呼び出すと、関数Aの内部で関数Bにパラメータが渡されるのはなぜですか?

+1

[JavaScriptのクロージャはどのように機能するのですか?](https://stackoverflow.com/questions/111102/how-do-javascript-closures-work) – Andreas

+0

パラメータのない関数は「何か関数」ではありません。 。 *何かになる 'function(x){...} 'を返すのはIIFEです。 – Bergi

答えて

2

module patternとも呼ばれるこの関数を直接呼び出しています。

このコード

something = (function(){ 
    return function(myparam) { 
     // ... 
    }; 
})(); 

を有するときに、このコードと等価である:

something = function(myparam) { 
    // ... 
}; 
1

これがクロージャの仕組みです。関数を呼び出すと、戻り関数のパラメータを指定して関数を呼び出すことができます。この例を見てみましょう: - あなたが言うことができた我々は(マルチという変数に最初の関数呼び出しを保存見ることができるように、今

function multiply(num1) { 
 
    return function(num2) { 
 
    return num1 * num2; 
 
    }; 
 
} 
 

 
var multi = multiply(2); 
 
console.log(multi(5));

を最初のリターンからの関数であります関数の文は2行目に掛ける)、マルチを関数としてnum2の引数を渡しています。

関連する問題