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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(要注意作用域链中不存在同名变量)。

以上是关于Js变量定义——fn里 var与不var的区别的主要内容,如果未能解决你的问题,请参考以下文章

js 中使用var与省略var 定义变量的区别

let与var声明区别

在js里怎么var一个字符和变量组合的变量?

markdown JS var和这个定义变量的区别

js中let和var定义变量的区别

js中三种定义变量的方式const, var, let的区别。