代码之家  ›  专栏  ›  技术社区  ›  Grateful Lakshmi Swetha G

JS:为什么变量可以用和不用'var'关键字来声明。。。?

  •  1
  • Grateful Lakshmi Swetha G  · 技术社区  · 8 年前

    可以使用和不使用 var 关键字。

    var a = 100; // this works!
        b = 200; // and this does too!
    

    也可以在不初始化的情况下声明变量。

    var c;       // this is just as acceptable! 
    

    但是,为什么对于一个没有var的变量,在没有初始化的情况下声明,情况就不一样了呢。

    var c; 
        d;       // causes a reference error to occur!
    

    为什么?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Pointy    8 年前

    首先,你看到的是遗留行为。传统上,对未声明符号的赋值意味着应创建(声明)全局符号并将其设置为给定值。因此

    x = 1;
    

    什么时候 x 被视为全局符号的隐式实例化。

    这个 提到 指未声明的符号,如:

    x;
    

    是一个错误,因为符号未声明。

    在现代JavaScript中,当由于

    "use strict";
    

    语句(或由于其他影响,如Node.js代码),隐式创建全局符号也是错误的。

    通常,隐式全局符号实例化被认为是一个坏主意。浏览器JavaScript中的全局符号是非常有问题的,因为全局名称空间被严重污染。谢天谢地,很容易将代码封装在函数范围内,为符号创建“安全空间”,而不用担心浏览器强加奇怪的全局名称。

        2
  •  0
  •   Sua Le    8 年前

    您可以在非严格模式下执行此操作

       var a = 100; // this works!
            b = 200; // and this does too!
    

    对于非严格模式,someVar=someValue,如果someVar不存在,javascript将声明它并为someVar分配一个someValue。

    在这种情况下:

    var c; 
        d;       // causes a reference error to occur!
    

    第1行:var c--&燃气轮机;声明c,这是有效的语法。 第2行:d--&燃气轮机;您访问了d,但d的罚款不足-->导致错误!!! 假设d在该行之前的任何位置定义,因此它不应导致错误!!