【发布时间】:2013-06-04 05:55:39
【问题描述】:
我正在阅读一篇关于使用 node.js 创建刮板的博客文章 here,并且遇到了一些有趣的 javascript,我无法完全理解。这正是我想在我的脚本中使用的东西,但作为一个新手,我不想在不知道它们首先做什么的情况下盲目地复制和粘贴代码。
在这个函数中:
function main()
{
var a = 1;
var f = function() { console.log(a); }
a = 2;
f();
}
main();
输出为2,因为var a 在调用f() 之前已更改。
但是,在这个函数中
function main()
{
var a = 1;
var f = ( function(a) { return function() { console.log(a); } } )(a);
a = 2;
f();
}
main();
输出是1。上面链接的博客文章中对此进行了相当详细的解释,但我一生都无法弄清楚为什么会这样。
帖子提到了var a 的范围被传递到函数中——谁能详细说明这意味着什么?为什么必须在var f 函数的末尾加上最终的(a)?
【问题讨论】:
-
这是一个函数表达式,它会立即被
... (a)调用,它还将`a` 传递给函数(想想一个简单的函数调用)。a的值被保留,因为它现在是函数表达式范围的本地 var。 变量按值传递
标签: javascript