2016-05-18 2 views
0

У меня есть два кода javascript, которые выглядят одинаково.Разница между: и = с функцией javascript

Первый, как показано ниже, получается 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,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

Вы слышали о 'scope' в javascript? –

+0

Возможный дубликат [Что такое область переменных в JavaScript?] (Http://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript) –

ответ

0

В первом фрагменте var val = 100; определяет переменную как глобальную со значением 100. val : 1, определяет объект с именем val внутри объекта counter.

Во втором фрагменте val = 1; определяет присвоение значения 1 глобальной переменной val.

Так что это нормально, что результат другой: это вопрос о variable scope.

Смежные вопросы