JavaScript 函数参数和作用域

标签 javascript function scope

我用下面列出的代码做了一些测试:

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/

相关文章:

javascript - 未捕获的类型错误 : Object #<error> has no method 'call'

javascript - 如何在一段时间后更改 HTML 中的 div 内容,然后再次启动?

javascript - 有没有办法让 WebGL 在屏幕外渲染,而无需将 webgl Canvas 附加到 DOM?

javascript - 使用 <span> 彩虹滚动文本

javascript - 如何使用回调函数作为参数,其中有自己独立的参数?

javascript - js foo()、foo 和 function(){foo()} 之间的区别

javascript - 通过 JavaScript 类处理时,序列化时表单字段为空

python - Python 中的自由变量被视为全局变量吗?

javascript - 如何从 "this"对象获取 html 数据 - Vanilla JavaScript

JavaScript(变量范围): variable does not get the value assigned to it