我用下面列出的代码做了一些测试:
function foo(x) {
alert(y);
}
var y = 'I am defined outside foo definition';
foo();
上面的代码给了我一个警告'我在 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();
上述两个代码都给了我一个警报“未定义”。
所以为什么?
最佳答案
因为在这两种情况下,函数 bar
中都有一个局部作用域变量(第一个参数)。您没有向其传递任何值(value)。由于有一个局部范围的变量,它不会检查全局范围以查看是否存在这样的变量。
在这种情况下,您需要在 bar
时将值传递给参数。被调用
function bar(x) {alert(x);}
x = 'I am defined outside foo definition';
bar(x);
在第一种情况下,当您使用
y
里面 bar
没有名为 y
的局部范围变量在 bar
因此它会查看父范围以查看是否存在这样的变量,如果这样访问变量值就是它的工作方式
关于JavaScript 函数参数和作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30748819/