JavaScript中未声明的变量

JavaScript通常有3种声明变量的方式

  1. var和let -> 只存在作用域的区别
  2. const -> 只读
  3. 直接赋值,不声明

其中第3种是最容易忽略的,这样会产生一个全局变量,算是未声明全局变量

1
2
3
4
5
function foo(){
x = 666
}
alert(x) // Uncaught ReferenceError: x is not defined
//这里只声明了foo但是没有运行foo,所以报错
1
2
3
4
5
6
function foo(){
x = 666
}
foo()
alert(x) // 显示为666
//可以看出,这里跳出了foo函数还能够打印出x的数值,所以为全局变量

比如下面这样直接给x赋值,前面不加任何关键字。这样做的结果是在js能被执行通过,但是会被警告。

1
x = 666