この記事は、JavaScript のクロージャーに関する知識を共有するものであり、参考になれば幸いです。 Help
クロージャは、関数とその関数が宣言されている字句環境の組み合わせです。内部関数が外部に保存されると、クロージャが生成されます。解放すると元のスコープ チェーンが失われ、メモリ リークが発生しますが、同時にクロージャは特定のデータをそのデータに対する操作に関連付けることができるため、非常に便利です。
例:
function demo() { var name = '张三'; // name 是demo()创建的局部变量 function demo1() { //demo1()是demo()中的内部函数(闭包) console.log(name); // 使用父函数中声明的变量 } demo1(); }demo();
実行結果
nameという名前のローカル変数とdemo1という名前のローカル変数を関数demo()に作成します。 () 内部関数。 demo1() 関数は、demo() 関数本体内でのみ使用できます。 demo1 には独自のローカル変数がありません。ただし、内部関数は外部関数の変数にアクセスできるため、demo1() は親関数 demo() で宣言された変数名にアクセスできます。ただし、demo1 に同じ名前の変数が定義されている場合は、自身の関数で定義された名前が使用されます。この例は、入れ子関数がその外側のスコープで宣言された変数にアクセスできることを示しています。
上記のコードをこれに変更するとどうなるでしょうか?
function demo() { var name = '张三'; function demo1() { console.log(name); } return demo1; } var newDemo = demo(); newDemo();
実行結果
実行結果から、2 つのコードの結果が同じであることがわかります。 ) は、クロージャを形成するために実行前に外部関数によって返されます。この場合、 newDemo() はデモの実行時に作成された関数 demo1 への参照であるため、変数名 name を console.log(name) に渡すことができます。 newDemo() が呼び出されたとき。
例
function num(x) { return function(y) { return x + y; };} var num1= num(2); var num2 = num(3); console.log(num1(2));// 4 console.log(num2(2));// 5
実行結果
Aを受け取る関数num(x)を定義します。パラメータ x を受け取り、新しい関数を返します。この新しい関数はパラメータ y も受け取り、x と y の合計を返します。同時に、2 つの新しい値 num1 と num2 が定義され、どちらもクロージャと渡された値です。
要約: 上記はこの記事で共有された内容です。皆様のお役に立てれば幸いです。
以上がJavaScriptにおけるクロージャの意味と使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。