30秒搞定javascript作用域

  引用一下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") ,初始化未声明的变量就会报错。

  

 

你可能感兴趣的:(30秒搞定javascript作用域)