4

誰かが次のコードのスコープバインディングを説明できますか

window.name = "window";

object = {
       name: "object",
       method: function() {
             nestedMethod: function() {
                   console.log(this.name);
             }
             nestedMethod();
       }
}

object.method();  // print 'window'

私の質問は、thisなぜスコープがthis失われ、デフォルトがグローバルスコープになるのかということだと思います。作成したすべての無名関数はグローバル スコープで実行されますか?

4

4 に答える 4

3

関数を呼び出すときはいつでも、 と書くだけでfunc()this関数内でグローバル オブジェクトがポイントされます。あなたの場合、次のように書きます。

nestedMethod();

this内部はwindownestedMethodオブジェクトです。call(または) を使用applyして、関数呼び出しのコンテキストを手動で定義できます。

nestedMethod.call(this);
于 2013-07-09T21:36:51.583 に答える
0

次のようにネストされた関数を宣言する必要があります。

Super.prototype.someFunc = function() {
  this.nestedFunc = function() {}
  //now call it
  this.nestedFunc()
}
于 2021-04-09T11:44:57.767 に答える