Javascript函数问题,有人可能会帮忙解释一下吗?

时间:2011-07-23 13:37:31

标签: javascript

我目前正在尝试学习Javascript并理解函数是该语言最重要的方面之一,但我不得不说我发现它很难理解它们,特别是当在这里和任何地方使用不同的参数时。 / p>

我一直在看这个代码,我在另一个关于封闭的堆栈溢出帖子中读到并且无法理解16是如何被警告的,我已经使用console.log来计算每个点使用的值,并且似乎得到了总共17个,有人可能会解释一下吗?

function foo(x) {
 // console.log(x); = 2    
 var tmp = 3;
 return function (y) {
  // console.log(y); = 10
  alert(x + y + (++tmp));
  // console.log(++tmp); = 5?
 }
}
var bar = foo(2);
bar(10);

如果有人能提供任何可能使事情开始对我有用的功能的智慧,那将非常感激。

凯尔

3 个答案:

答案 0 :(得分:6)

alert()命令确实弹出16。

++tmp是preincrement语句 - 首先,它递增值(从3到4),然后继续执行该行。

因此2 + 10 + 4传递给alert()

警报日志5下方的console.log(++tmp),因为tmp变量再次增加,从4增加到5。

答案 1 :(得分:1)

尝试记录

console.log(tmp);

而不是

console.log(++tmp);

答案 2 :(得分:1)

foo(2)在返回的函数范围内将tmp初始化为3,将x初始化为2。 bar(10)然后添加2,10,增加tmp的结果(在添加到xy之前从3变为4)。

所以警报值将是2 + 10 + 4 .. 16的总和。