[JS文法スコープと結合アイコン

原因:スコープクライミング

  • 関数の本体内で許可されたJavaScriptは、他の変数の現在の環境を参照してください。
  • 現在の環境変数が見つからない場合、その後、あなたがこれまでにグローバル(ウィンドウ)に登るまで、探してタイル張りの床の上に登ります。
  • その値は、関数が呼び出されている環境に応じて、それは同じではありません決定されるので、これは、現在の環境であることをいいます。

バインドする方法:バインド

  • バインドは、任意のコンテキスト機能を指定することができます。
  • バインドハンドラは、新しい機能を返すために、すぐに実行されません。

バインディング第二の方法:適用/呼び出し

  • スコープの結合点で、両方のコールは/適用されるのと同じ機能が、交換することができます。パラメータが道を通過したことを除いて。
  • ハンドラがすぐに呼び出された適用/呼び出し、それは新しい関数を返しません。使用シナリオをバインドする方法ではなく、機能の違いはそう。
  • このモードは、主に使用されています
    • クラス定義、現在の融資環境は、承継の効果を達成するためにする場合:
    function Product(name, price) {
      this.name = name;
      this.price = price;
    }
    function Food(name, price) {
      Product.call(this, name, price); 
      // <==> Product.apply(this, [name, price]);
      // <==> Product.bind(this, name, price)();
      this.category = 'food';
    }
    console.log(new Food('cheese', 5));
    • この関数は、このように、他の環境に呼び出すと:
    function greet() {
      var reply = [ this.animal, 'typically sleep between', this.sleepDuration ].join(' ');
      console.log(reply);
    }
    var obj = {
      animal: 'cats', sleepDuration: '12 and 16 hours'
    };
    greet.call(obj);  // cats typically sleep between 12 and 16 hours

参考資料

おすすめ

転載: www.cnblogs.com/mazhaokeng/p/11518825.html