5

これは例です:

function one() {

    var a = 1;
    two();

    function two() {

        var b = 2;
        three();

        function three() {

            var c = 3;
            alert(a + b + c); // 6

        }
    }   
}

one()​; //calling the function

関数 one() を呼び出すと、結果は になり6ます。

スコープ チェーンに関するすべてです。すべての変数が解決されました。ここで 1 つの質問があります。

すべての変数がスコープ チェーンを通じて解決されるのに、なぜこの " this " キーワードが必要なのですか?

したがって、次の関数があるとします。

function a() {
    var a = 'function a';

    function b() {
        var b = 'function b';
        alert (a); //will be function a, without keyword this 
        alert (this.a); // what will be the effect of this line
    }
}

「this」キーワードはいつも私を混乱させます!

どなたかわかりやすく、詳しく教えてください。

4

2 に答える 2

3

それらのキーワードthisは、JavaScriptの関数で次のように解決されます-

  1. 関数がオブジェクト上またはオブジェクトを介して呼び出される場合、そのオブジェクトは呼び出しコンテキストまたは関数の「this」値です。例えば ​​-

    var o = {
       f : function(){
          //do something  
       }
    }
    

    オブジェクト'o'を使用してオブジェクト'o'のメソッド'f'を呼び出す場合-

    o.f()// in method f, 'this' refers to o inside the method o
    
  2. 関数がオブジェクトに対して呼び出されない場合、またはオブジェクトを介して呼び出されない場合、現在のウィンドウオブジェクトはthis、関数の呼び出しコンテキストまたは値です。例えば ​​-

    function f(){
        //do something
    }
    
    //calling f
    f();// 'this' will refer to current window object 
    

あなたの場合、これは現在のウィンドウオブジェクトをthis.a参照し、グローバルスコープで定義した関数aへの参照です。

さらに、関数の呼び出しコンテキストまたは「this」値を呼び出し中に指定できます。Function.prototype.callメソッドを確認してください-JavaScript| MDNおよびFunction.prototype.applyメソッド-JavaScript| MDN

于 2013-02-13T06:03:17.840 に答える
0

this キーワードは、関数のスコープを参照します。上記のコードでは、a という名前の変数がないため、 this.aundefinedと出力されます。this キーワードは、グローバル スコープではなく、現在のローカル スコープを参照するために使用されます。したがって、関数 b に a という名前の変数がある場合、 this.a は関数 b で定義された変数を参照し、その外部では参照しません。関数 b の外で this を参照すると、グローバル スコープが参照されます。

于 2013-02-13T05:49:50.243 に答える