JavaScript 闭包中状态存储问题?
本文介绍了JavaScript 闭包中状态存储问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
在一个教程上看到一段代码,涉及到闭包的相关知识。
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 来保存状态。
不知道自己理解的对不对?麻烦各位帮忙看看。
解决方案
for 循环是立即执行的没错,for 里的第一个 IIFE 不需要一个临时变量来保存 i
,因为这个 IIFE 马上就执行了,还没等到 i
变化。所以这里面的 witch["get" + i]
和 which["set" + i]
这里用 i
是没有问题的。
但是 IIFE 里定义了两个函数,赋给了 which
的两个属性。这两个函数里也用到了 i
,而且这里没调用这两个函数,还不知道是啥时候调的,不过多半是在循环结束之后。那时候 i
早都改变了。所以需要在 IIFE 里申明一个临时变量保存当前 i
的值 (var p = i
),再将 p
用在那两个函数里面。
这篇关于JavaScript 闭包中状态存储问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文