zoukankan      html  css  js  c++  java
  • JavaScript声明变量时为什么要加var关键字

    JavaScript声明变量时为什么要加var关键字

    一、总结

    一句话总结:

    【隐式声明的变量这种bug难以被发现】:比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
    【函数内的隐式变量的修改会影响全局的变量】:这种bug在函数嵌套很多层的时候也非常难以发现
    【上述两个综合起来说都可以说是污染全局变量】:

    二、JavaScript声明变量时为什么要加var关键字

    转自或参考:JavaScript声明变量时为什么要加var关键字_javascript技巧_脚本之家
    https://www.jb51.net/article/55830.htm:

    var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它,不过还是建议大家加var

    在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。

    var x = "XX"; 
     y ="xxx"; 

    诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
    当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量!
    比如:

    window. y = "hello"; 
    function func(){ 
    y = "OH, NO!!!"; 
    } 
    func(); 
    alert(window.y); //#=> display "OH, NO!!!"

    当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。(这种bug也挺讨厌的,尤其是封装的比较复杂的代码)
    比如:

    var x = "window.x"; 
    function a() { 
    var x = "a's x"; 
    var b = function() { 
    var c = function() { 
    //no var! 
    x = "c's x:"; 
    }; 
    alert("before c run,the b.x:" + x); 
    c(); 
    alert("after c run, the b.x:" + x); 
    }; 
    alert("a.x is:" + x); 
    b(); 
    alert("after b function runed, the a.x is:" + x); 
    }; 
    alert("before a run, window.x:" + x); 
    a(); 
    alert("after a run, window.x:" + x);

    这里面有以下几层:window, func a, func b, func c一直作层级嵌套。window->a->b->c
    window和a中,都有定义变量x,b中未定义该变量,在c中‘隐式'声明了一个x,该x最终修改了a变量的值。
    牢记,在JavaScript中,声明变量,一定前面要加var .

     
  • 相关阅读:
    pg常用命令
    dmhs
    Redis集群
    Redis哨兵高可用架构
    Redis外网无法连接的问题
    Redis主从
    Redis持久化
    Redis安装
    Mysql执行计划详解
    Mysql安装配置
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12616496.html
Copyright © 2011-2022 走看看