输出为15(在f中,x为10,y为7),具有以下内容:
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); console.log(z) };
Run Code Online (Sandbox Code Playgroud)
为什么x取第4行而不是第1行的值(为什么不是第3行)?
vars 没有被限制的范围,所以最后一行相当于
x = 10; z = g(f); console.log(z)
Run Code Online (Sandbox Code Playgroud)
现在应该更清楚的是,将值x更改为10 之前 f执行的值.
同样重要的是要注意,在调用函数时,而不是在定义函数时,会计算自由变量.当然,变量的值可以在函数的定义和函数的调用之间改变,就像在您的示例中一样.
在第三行中,x是本地的g,因此完全独立于"外部"变量x.
一个更简单的示例演示了这种行为:
var x = 5;
function foo() {
console.log(x);
}
x = 10;
foo(); // outputs 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |