2016-05-18 6 views
0

私は同じように見える2つのjavascriptコードを持っています。の違い:and = = javascript function

最初のものは次のようになり、2行目、101行目、102行目になります。

<script> 
    var val = 100; 
    var counter = { 
     val : 1, 
     func1 : function() { 
      this.val += 1; 
      alert('func1() this.val: ' + this.val); 
      func2 = function() { 
       this.val += 1; 
       alert('func2() this.val: ' + this.val); 
       func3 = function() { 
        this.val += 1; 
        alert('func3() this.val: ' + this.val); 
       }; 
       func3(); 
      }; 
      func2(); 
     } 
    }; 
    counter.func1(); 
</script> 

次のコードは2番目のコードです。結果は2,3,4

<script> 
    var val = 100; 
    var counter = function() { 
     val = 1; 
     func1 = function() { 
      this.val += 1; 
      alert('func1() this.val: ' + this.val); 
      func2 = function() { 
       this.val += 1; 
       alert('func2() this.val: ' + this.val); 
       func3 = function() { 
        this.val += 1; 
        alert('func3() this.val: ' + this.val); 
       }; 
       func3(); 
      }; 
      func2(); 
     }; 
     func1(); 
    }; 
    counter(); 
</script> 

です。私の意見では、この違いは、マークから来ています。=。そうですか?

Q.技術的には、この違いはレキシカル環境に関連していますか?

Q.スコープや閉鎖に違いがあると思われますか?

Q.上記の質問に理由がない場合、理由は何でしょうか?

+0

オブジェクトにプロパティまたは変数を割り当てるには、 ':'を使用します。そしてそれらを非オブジェクトで割り当てる '='。 – choz

+1

javascriptの 'scope'について聞いたことがありますか? –

+0

[JavaScriptの変数の範囲は何ですか?](http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript) –

答えて

0

最初のスニペットでは、var val = 100;は変数をグローバルとして、100の値で定義します。 val : 1,は、counterオブジェクト内にvalという名前のプロパティを定義します。

第2のスニペットでは、val = 1;は、グローバル変数valの値1の割り当てを定義します。

結果は違うので正常です:variable scopeについての質問です。