为了账号安全,请及时绑定邮箱和手机立即绑定

js闭包两种写法的区别

js闭包两种写法的区别

弑天下 2019-02-27 16:24:22
(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例子是随便找的,这两种写法有什么区别和相同点呢?
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-03-08
  • 2 回答
  • 0 关注
  • 535 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号