我在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的值,而不是前一个的值 块,其中x = 7? 谢谢你的帮助
答案 0 :(得分:1)
您可以完全删除第一个作业。在您致电g(f)
之前,它会被覆盖。
另外,你可以删除最后一个块的括号,因为JS中没有块作用域(实际上块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);
...并且始终放置分号。即使它们看起来可选,但在某些情况下它们是强制性的。
答案 1 :(得分:1)
在全局执行上下文中,变量x的值为10。 当函数f最终被称为参数的值y时,这个y实际上代表函数g的本地执行上下文中的x的值,这里x是7.。
var x = 5;
function f(y) {
return (x + y) - 2 ;
}; // value of global var x is 10, value of parameter passed is 7
// this value comes from the local var x of g function's execution context.
function g(h) {
var x = 7; return h(x); };
{ var x = 10; z = g(f); };
console.log(z);