变量提升

在javascript,变量有4种基本方式进入作用域:

  1. 语言内置:所有的作用域里都有this和arguments;(译者注:经过测试arguments在全局作用域是不可见的)
  2. 形式参数:函数的形式参数会作为函数体作用域的一部分;
  3. 函数声明:像这种形式:function foo(){};
  4. 变量声明:像这样:var foo;

函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部。这个意思是,像下面的代码:

function foo() {  
    bar();  
    var x = 1;  
} 

实际上会被解释成:

function foo() {  
    var x;  
    bar();  
    x = 1;  
}  

请注意:

  1. 变量赋值并没有被提升,只是声明被提升了。但是,函数的声明有点不一样,函数体也会一同被提升。

  2. 对于全局作用于范围的变量,var与不var是有区别的. 没有var的写法,其变量不会被提升。比如下面的程序会报错:

  <script>  
    alert(a);  
    a=1;  
  </script>
  // throw ReferenceError

results matching ""

    No results matching ""