1、什么是作用域?
这就要说到执行环境,执行环境都有一个与之关联的变量对象,这个对象包含了环境中定义的所有变量和函数,在浏览器中,全局执行环境被认为是window对象。每个函数都有与之相对应的执行环境。当代码在一个环境中执行时会创建变量对象的一个作用域链。这个作用域链就是语法中规定的变量对象在哪个环境中执行是有效的。
说白了,其实作用域就是规定相应代码的执行在全体代码的哪一块能够起作用
2、示例
var num1=5;
function changeNumber(){
var num2=6;
function swapNumber(){
var num3=num2;
num2=num1;
num1=num3;
//这里可以使用的是num1、num2、num3
}
swapNumber();
//这里可以使用的是num1、num2
}
//这里只能使用num1
changeNumber();
这里有三个执行环境:全局环境、changeNumber()的局部环境、swapNumber()的局部环境,如下图所示,内部环境可以通过作用域链访问所有的外部环境,而外部环境不能访问内部环境的任何量和函数。说得直白一些:就是在同一个作用域链中,越后面的可以获得执行的代码越多。
3、拓展
作用域链可以通过try-catch语句的catch块和with语句来延长,其实就是在作用域前端加一个变量对象。
var声明的变量会自动添加到最接近的环境中。
4、一句话
作用域就是规定相应代码的执行在全体代码的哪一块能够起作用