我对javascript中varible的范围感到困惑

时间:2016-10-22 02:03:51

标签: javascript

我正在练习Javascript,所以我写道:

 function f(){ 
      console.log(this);      
      var b=2;  
      console.log(b);   
      this.b++;     
      console.log(b);   
      b++; 
} 
f();
console.log(b);

结果让我感到惊讶:

/*the console result*/
window
2
2
NaN

在我看来,this指向f();bf();的私有变量。 this.b++b++对同一个变量进行操作。

/*the right anwser in my mind*/
f
2
4
TypeError

请解释为什么我没有得到预期的结果。

3 个答案:

答案 0 :(得分:3)

让我们分解这里发生的事情:

dictionary.values()

答案 1 :(得分:0)

您在b函数中使用f函数将var b变量设置为local-variable,因此您无法使用window访问它变量

如果您将b变量设置为全局(外部范围内为var b),则可以使用thiswindow}来执行此操作:



var b
function f(){ 
      // console.log(this);
      b=2;  
      console.log(b);   
      this.b++;     
      console.log(b);   
      b++; } 
f();
console.log(b);




  

我已禁用第一个console.log(this),因为so-snippet在那里提供了大量输出

答案 2 :(得分:-2)

要获得4,你必须这样做 this.b = this.b ++; 要么 B = ++;也会有用。

您将Nan作为最后一个结果,因为b未在该范围内定义。您可以在javascript中阅读有关变量提升的更多详细信息。