每一个函数都有自己的执行环境。代码在一个环境中执行时,会有一个作用域链来保证执行环境对变量和函数有序的访问。有序是指:保证每个环境在访问时,先在自己的变量对象(环境)里搜索变量和函数,搜索不到时,再一级一级的往上查询变量和函数,直到查找到了全局变量对象(例如window);但是任何环境都不能向下级中搜索变量和函数。
举个栗子:
var a=10;
function numberone(){
var b=20;
function numbertwo(){
var c=30;
console.log(a);//10
console.log(b);//20
console.log(c);//30
}
numbertwo()
console.log(a);//10
console.log(b);//20
console.log(c);//报错,c没有被定义
}
numberone();
由于变量c是在内部函数被定义,因此外部环境不能访问到变量c。
内部环境可以通过作用域链访问所有的外部环境,但是外部环境不能访问内部环境中的任何变量和函数。