引用一下js权威指南的一名话作为开场”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.”
javascript不存在大括号级的作用域,但他有函数作用域,也就是说变量在某个代码块中定义的变量(eg: if和for),外部是
可以访问的,下面的代码就可以正常执行:
if (true) { var value1 = 1;}console.log(value1); // 输出 1
但是定义在函数内的变量外部是不可见的,如下面的代码就会出错:value2 is not defined
function test() { var value2 = 2;}test();console.log(value2); // Error value2 is not defined
我们对上边的函数做一点点小修改,去掉函数内变量的var声明。
function test() { value2 = 2;}test();console.log(value2); // 输出 2
这是因为函数中的变量value2在被初始化赋值时没有使用var关键字,当调用完test()函数后value2
就添加到全局环境变量中,即使函数已经执行完毕,后面的代码依旧可以访问它。
!注意:在严格模式下(”use strict”) ,初始化未声明的变量就会报错。