ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptにおけるクロージャの意味と使い方

JavaScriptにおけるクロージャの意味と使い方

清浅
清浅オリジナル
2018-11-17 11:08:032543ブラウズ



この記事は、JavaScript のクロージャーに関する知識を共有するものであり、参考になれば幸いです。 Help

クロージャは、関数とその関数が宣言されている字句環境の組み合わせです。内部関数が外部に保存されると、クロージャが生成されます。解放すると元のスコープ チェーンが失われ、メモリ リークが発生しますが、同時にクロージャは特定のデータをそのデータに対する操作に関連付けることができるため、非常に便利です。

例:

function demo() {
  var name = '张三'; // name 是demo()创建的局部变量
  function demo1() { //demo1()是demo()中的内部函数(闭包)
    console.log(name); // 使用父函数中声明的变量  
    }
  demo1();  
    }demo();

実行結果

Image 1.jpg

nameという名前のローカル変数とdemo1という名前のローカル変数を関数demo()に作成します。 () 内部関数。 demo1() 関数は、demo() 関数本体内でのみ使用できます。 demo1 には独自のローカル変数がありません。ただし、内部関数は外部関数の変数にアクセスできるため、demo1() は親関数 demo() で宣言された変数名にアクセスできます。ただし、demo1 に同じ名前の変数が定義されている場合は、自身の関数で定義された名前が使用されます。この例は、入れ子関数がその外側のスコープで宣言された変数にアクセスできることを示しています。

上記のコードをこれに変更するとどうなるでしょうか?

function demo() {
  var name = '张三';
  function demo1() {
    console.log(name);
  }
  return demo1;
  }
  var newDemo = demo();
  newDemo();

実行結果

Image 1.jpg

実行結果から、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

実行結果

Image 2.jpg

Aを受け取る関数num(x)を定義します。パラメータ x を受け取り、新しい関数を返します。この新しい関数はパラメータ y も受け取り、x と y の合計を返します。同時に、2 つの新しい値 num1 と num2 が定義され、どちらもクロージャと渡された値です。

要約: 上記はこの記事で共有された内容です。皆様のお役に立てれば幸いです。



以上がJavaScriptにおけるクロージャの意味と使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。