Gab*_*是好人 4 javascript scope function
我用下面列出的代码做了一些测试:
function foo(x) {
alert(y);
}
var y = 'I am defined outside foo definition';
foo();
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我一个警告“我被定义在 foo 定义之外”。
然后另一个测试:
function bar(x) {
alert(x);
}
var x = 'I am defined outside foo definition';
bar();
function bar(x) {
alert(x);
}
x = 'I am defined outside bar definition';
bar();
Run Code Online (Sandbox Code Playgroud)
以上两个代码都给我一个警告“未定义”。
所以为什么?
因为在这两种情况下bar,您在未向其传递任何值的函数中都有一个局部作用域变量(第一个参数)。由于存在局部作用域变量,因此不会检查全局作用域以查看此类变量是否存在。
在这种情况下,您需要在bar调用时将值传递给参数
function bar(x) {alert(x);}
x = 'I am defined outside foo definition';
bar(x);
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,当您在y内部使用时bar,没有调用局部作用域变量y,bar因此它会查看父作用域以查看是否存在此类变量,如果这样访问变量值,则它是如何工作的