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

sty*_*ler 3 javascript

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

我一直在看这个代码,我在另一个关于封闭的堆栈溢出帖子中读到并且无法理解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);
Run Code Online (Sandbox Code Playgroud)

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

凯尔

Ond*_*tes 6

alert()命令真的弹出16.

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

所以2 + 10 + 4传递给了alert().

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