js问题辑录--函数的环境变量在声明时确定还是在执行时确定?

函数的环境变量在声明时确定还是在执行时确定?

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

由此可见,前面的结论正确

你可能感兴趣的:(js问题辑录--函数的环境变量在声明时确定还是在执行时确定?)