函数的环境变量在声明时确定还是在执行时确定?
var a = 'this is a';
var b = 'this is b'
function showA(){
return a;
}
function showOtherA(){
var a = "this is other a";
return showA()
}
showA() // 执行结果:"this is a"
showOtherA(); // 执行结果:"this is a"
假设1. 函数的环境变量在声明时确定。
如果在声明时确定,那么这个函数在任何环境下执行时,其能够访问的变量在其定义的环境内。那么用局部变量覆盖同名的环境变量,在局部环境中执行该函数,该函数还是不会访问到局部变量。
假设2. 函数的环境变量在执行时确定。
那么函数在执行时会直接取其所在的局部变量中的变量值。
根据代码执行结果可值,假设1 成立。
结论是: 函数的环境变量在函数声明时确立。
那么根据此结论,可以推断,一个函数定义在全局环境中,其需要访问变量中要是缺少某个变量值。那么在局部环境中执行此函数,即便局部环境中有哪个缺少的变量,此函数依然会报错。
测试代码如下:
function showB(){
return b;
}
function master(){
var b = "this is char b";
return showB()
}
master() // 执行结果 error b is not defines
由此可见,前面的结论正确