(function(j) { // j = i
setTimeout(function() {
console.log(new Date, j);
}, 1000);
})(i);
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
例子是随便找的,这两种写法有什么区别和相同点呢?
不太清楚你想了解什么
闭包就是一种特性,用在哪里的目的都是保存上一层的作用域内的变量,没有什么区别
硬要说区别只是你用他的特性来做不同的事情
在我的理解里,你直接在全局作用域下定义一个函数,他也是一个闭包,因为他随时都可以访问到顶层作用域里的变量
再说一下你举的例子
1.严格来讲,这个例子应该叫自执行函数的应用,跟闭包关系不太大,真正用到闭包的是setTimeout里面的这个函数,他访问了外层的参数j(注意当执行的时候j的值是i传递的),所以这个也常用在for循环内,网上例子很多。
2.这个就是很常见的闭包使用了,暴露给外界一个接口函数,用来访问内部的n,可以用来模拟私有变量。