我目前正在尝试学习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);
如果有人能提供任何可能使事情开始对我有用的功能的智慧,那将非常感激。
凯尔
答案 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
的结果(在添加到x
和y
之前从3变为4)。
所以警报值将是2 + 10 + 4 .. 16的总和。