Js变量定义——fn里 var与不var的区别

   js运行时内置了一个Global对象。

    这个Global对象跟运行环境有关。在浏览器运行环境中。Global就是window对象。
在nodejs中。Global对象是global对象。

    

    当你在浏览器环境中,直接使用一个未经定义的变量,
例如foo=123;那么foo这个变量自动声明为全局变量。变量引用自动挂载到了Global对象,即window对象上,使用上等同于全局对象的属性,你可以试试来验证。

  如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
      <script>
        var a=3;
        console.log(window.a); //3
      </script>
</body>
</html>

  

    在全局对象下定义的函数体里,不用var声明的变量,首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析 该变量; 如果在任何当前作用域链中找到该变量,则会执行对该变量赋值; 如果没有找到该变量,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中定义该变量为全局变量并赋值。

    测试代码如下:

               

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
      <script>
       function test(){
        var a1=3;
        a2=4;
       }
       console.log(window.a1); //undefined
       console.log(window.a2);  //4
      </script>
</body>
</html>

  所以建议各位在fn里要记住定义局部变量要var,全局变量不要var(要注意作用域链中不存在同名变量)。

posted @ 2016-02-25 10:05  光辉的一角  阅读(1254)  评论(0编辑  收藏  举报