次のJavaScriptコンストラクトは閉鎖と呼ばれていますか? [複製
-
28-09-2019 - |
質問
この質問にはすでに答えがあります:
(function() {
//do stuff
})();
編集:私はもともと、この構造は閉鎖と呼ばれると考えていました - 変数がキャプチャされた場合、閉鎖に(潜在的に)結果を引き起こした効果ではありません。
これは閉鎖自体の行動とは決して関係ありません - これは私が完全に理解しており、尋ねられているものではありませんでした。
解決
それは匿名の関数です(またはより正確には スコープ匿名関数)それはすぐに実行されます。
1つの使用は、その中で宣言されている変数と関数がその関数にスコープされ、したがってグローバルなコンテキストから隠されていることです(したがって、カプセル化と情報が隠されている)。
他のヒント
それは匿名の関数ですが、外側のスコープへの参照がないので閉鎖ではありません
私は通常、「匿名関数の即時の呼び出し」のようなものと呼んでいます。
または、より単純に、「自己負担関数」。
すこし。しかし、それは実際には何も近づいておらず、すぐに呼ばれているので、実際には単なる匿名の関数です。
このコードを取ります:
function foo() {
var a = 42;
return function () {
return a;
}
}
var bar = foo();
var zab = bar();
alert(zab);
ここで、foo()によって返される関数は閉鎖です。変数の周りに閉じます。範囲外に途切れてしまったとしても、閉鎖を呼び出すことで閉鎖を呼び出すことは、まだ値を返します。
いいえ、閉鎖はこれらの線に沿ってむしろ何かです:
function outer()
{
var variables_local_to_outer;
function inner()
{
// do stuff using variables_local_to_outer
}
return inner;
}
var closure = outer();
閉鎖は、それを返した関数に局所的な変数への参照を保持します。
編集: :もちろん、匿名関数を使用して閉鎖を作成できます。
var closure = (function(){
var data_private_to_the_closure;
return function() {
// do stuff with data_private_to_the_closure
}
})();
所属していません StackOverflow