私が読んだ記事ほど多くの質問が残っています。Javascript Closure Clarification?
悪名高いループ問題(保持数とそれらの一つ一つに、アラートとのリンクのループ)
- :
私はすでにのような閉鎖の使い方を知っている(と理解します)
カウンタが増加しました(増加した数値を警告する関数を呼び出してください)
:その外側関数 のローカル変数を参照
内側機能hereから
クロージャを作成する:
クロージャは関数のローカル変数であります - 関数が返された後で生きているか、クロージャがスタックフレームでない場合 割り当て解除関数が返ってきたらd。 (「スタック・フレーム」かのよう ではなく、スタック上にあるのでmallocた!)
3の質問をしてください。
質問#1
私はすべてのことを言われましたJSの関数はクロージャを作成します。
WHAT ???プライベート変数を持つ通常の関数を作成すると、スコープが作成されます。閉鎖ではない。
私はこの:(from hereようなその閉鎖作業と思った)
- 外側の、 "機能メーカー" 機能を確認します。
- その内部にローカル変数を宣言します。
- 内側の関数を外側の関数の内側に宣言します。
- 内部関数内の外部関数の変数を使用します。
function functionMaker(){ var x = 1; function innerFunction(){ alert(x); x++; } return innerFunction; }
は、なぜ彼らは言う:
- は、外側の関数は、関数を実行し、内部機能
- を返し、変数
exmampleにその戻り値を代入持っていますすべてのjs関数はクロージャを作成しますか?Immediately Invoked Function Expression
クロージャを作成する -
質問#2
はSelf-Invoking Functions
別名IEFAしていますか?
上から6ルールのようなパターンが表示されていない
(function (a) {
alert(a);
})(4);
私を見て:Have the outer function return the inner function
がここにある場所を正確に ?私は単語return
を見ない。
質問#3
function myFunction() {
var myVar = 1;
var alertMyVar = function() {
alert('My variable has the value ' + myVar);
};
setTimeout(alertMyVar, 1000 * 3600 * 24);
}
myFunction();
いmyFunction
は、ここでは一日のために生きていましたか?またはsetTimeout
の直後に終了しましたか?もしそうなら、どのようにSetTimeOut
が記憶されたのですか?その値は?
私はそれを正しくする手助けをしてください。
ありがとうございました。それは私の3番目の質問に関連していますか? '関数呼び出しの寿命を超えて'? –
忘れないでください:JavaScript IIFEにはかっこが必要です。 '(function(){})();' –
@WaleedKhanいいえ、そうではありません。 'function'キーワードをあいまいにするだけでいいです。 '= '式の右辺にはあいまいさがないので、かっこは必要ありません。 – Pointy