javascript - JS : Why are variables allowed to be declared both with and without the `var` keyword. ..?

标签 javascript initialization declaration var

可以使用或不使用 var 关键字来声明 JavaScript 变量。

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!

为什么?

最佳答案

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

x = 1;

x尚未声明时,被视为全局符号的隐式实例化。

提及未声明的符号,如下所示:

x;

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

在现代 JavaScript 中,当“严格”模式由于以下原因而生效时

"use strict";

声明(或者由于其他影响,可能是 Node.js 代码的情况),全局符号的隐式创建也是错误的。

通常,隐式全局符号实例化被认为是一个坏主意。浏览器 JavaScript 中的全局符号存在很大问题,因为全局命名空间受到严重污染。值得庆幸的是,可以轻松地将代码包装在函数作用域中,为符号创建“安全空间”,而不必担心浏览器强加奇怪的全局名称。

关于javascript - JS : Why are variables allowed to be declared both with and without the `var` keyword. ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47687115/

相关文章:

javascript - 将 facebook 分享按钮链接到 FB.ui()

c++ - 错误 : invalid initialization for struct in C++

javascript - 如何为不同父div下的列动态设置等高

javascript - 如何将对象数组展平为每个对象参数的数组?

c++ - 想通过使用带变量的构造函数来声明数组

c++ - 再次讨论 C++ 中的静态初始化顺序

c++ - 前向声明原因 "one or more multiplied defined symbol found"?

c++ - 如何用 1000000 个元素声明类 C++

c - 变量声明完成点

javascript - 滚动文本在 Chrome 中有像素痕迹