最近有小哥替他弟弟问我这么一个问题,问下面这段代码的输出是什么。
首先我就想,小哥你自己搞IT就算了,还让你弟弟搞IT,要是选个高大上的职业多好,我也是醉了。。。
言归正传,对于这个代码,这是一个典型的闭包结构。两次调用f1()实际上两次调用了f1的代码,生成了2个闭包,所以result1和result2里面的n不是share的。
对于nAdd(),注意到它并没有用var声明,所以这货其实是全局作用域的一个变量,但是因为JS找变量是看在哪里定义的而不是看在哪里调用,所以它也闭包了n。问题是每次调用f1(),nAdd的值就被重新定义成了一个新的函数。所以第二次调用f1()时会把第一次调用
f1()时的nAdd的值覆盖掉。因此实际上nAdd最后是闭包了result2的n,而不是result1的。
最后,看一下在调试器中的运行结果:
网友评论