我在java脚本中有这段代码
var x = 5;
function f(y) { return (x + y) - 2 };
function g(h) { var x = 7; return h(x) };
{ var x = 10; z = g(f) };
z 值为 15。为什么? 表达式 (x+y)-2 的计算结果为 (10+7)-2。 为什么x得到的值是10,而不是前一个的值 block ,其中 x = 7? 感谢您的帮助
最佳答案
您可以完全删除第一个作业。在调用 g(f)
之前它会被覆盖。
此外,您可以删除最后一个 block 的括号,因为 JS 中没有 block 作用域(实际上 block 作用域是通过 let
引入的,因此您想使用它)。
var x = 5;
function f(y) {
// global variable x is 10 -> 10 + 7 - 2 = 15
return (x + y) - 2;
}
function g(h) {
// x gets declared locally - local value will be used
var x = 7;
return h(x); // f gets called with y = 7
}
x = 10; //global x gets changed
z = g(f);
...并始终放置分号。尽管它们可能看起来是可选的,但在某些情况下它们是强制性的。
关于javascript - js 函数中的变量值来自哪个作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41634332/