function f1() {
var n = 999;
f2 = function () {
n += 1;
console.log(n);
}
}
f1();
f2();
如上代码中,定义了一个函数f1,内部又定义了一个匿名函数(也就是闭包),并且赋值给f2,按理来说,f2前面不是要加var标示来声明一个变量吗?但是我加上var后,却报错了,提示错误:f2 is not defined。为什么呢?另外,为什么上面代码在全局环境中能够访问在f1内部定义的f2?一共两个疑惑,先谢了。
你的两个疑惑其实都是一个问题。
f2没有写var的时候,相当于定义了一个全局变量,所以你当然可以在外部访问f2;
f2写上var之后,它就成了f1私有的了,当然就不能在外面访问f2啦。