zoukankan      html  css  js  c++  java
  • 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(要注意作用域链中不存在同名变量)。

  • 相关阅读:
    springdataJpa对无主键表或视图查询的支持
    Blynk系列随笔
    arduino系列文章
    Debezium系列随笔
    Kafka系列随笔
    SSAS 收藏
    Saiku 系列
    Mondrian系列
    数据仓库理论学习
    加密解密
  • 原文地址:https://www.cnblogs.com/zhu-xingyu/p/5215966.html
Copyright © 2011-2022 走看看