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

JavaScript 闭包中状态存储问题?

JavaScript 闭包中状态存储问题?

慕村9548890 2018-09-13 10:29:39
在一个教程上看到一段代码,涉及到闭包的相关知识。function User( properities ) {    for ( var i in properities ) {         (function ( which ) {            var p = i;                      // 这个不是很明白             which['get' + i] = function() {                return properties[p];             };             which['set' + i] = function() {                 properities[p] = val;             }         })(this)     } }函数通过 User 传入参数,利用内部函数解析传入参数,动态绑定到指定的函数上。其中 var p = i; ,教程上解释是用 p 保存变量 i 的状态。该怎么理解?可以直接用变量 i 吗?我理解是 for 循环内部就是立即执行函数,能够将当前的 i 绑定闭包函数上,可以不需要变量 p 来保存状态。不知道自己理解的对不对?麻烦各位帮忙看看。
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

for 循环是立即执行的没错,for 里的第一个 IIFE 不需要一个临时变量来保存 i,因为这个 IIFE 马上就执行了,还没等到 i变化。所以这里面的 witch["get" + i] 和 which["set" + i] 这里用 i 是没有问题的。

但是 IIFE 里定义了两个函数,赋给了 which 的两个属性。这两个函数里也用到了 i,而且这里没调用这两个函数,还不知道是啥时候调的,不过多半是在循环结束之后。那时候 i 早都改变了。所以需要在 IIFE 里申明一个临时变量保存当前 i 的值 (var p = i),再将 p 用在那两个函数里面。


查看完整回答
反对 回复 2018-10-14
  • 1 回答
  • 0 关注
  • 577 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信