我是靠谱客的博主 整齐书包,这篇文章主要介绍避免在循环中创建函数,它可能超出你的理想目的,现在分享给大家,希望可以做个参考。

为了避免下面的问题,理解内部函数能访问外部函数的实际变量而无须复制是很重要的。

//糟糕的例子

//构造一个函数,用错误的方式给一个数组中的节点设置事件处理程序。
//当点击一个节点时,按照预期,应该弹出一个对话框显示节点的序号,
//但它总是会显示节点的数目。

var add_the_handlers = function (nodes){
	for(i=0;i<nodes.length;i++){

		nodes[i].onclick = function(e){
			alert(i);
        }
	}

} 

//结束糟糕的例子

 

add_the_handlers函数的本意是想传递给每个事件处理器一个唯一值(i)。
但它未达到目的,因为事件处理器函数绑定了变量i本身,而不是函数在构造时的变量i的值。

 

//改良后的例子

//构造一个函数,用正确的方式给一个数组中的节点设置事件处理程序。
//点击一个节点,将会弹出一个对话框显示节点的序号



var add_the_handlers = function (nodes){

	var helper = function(i){

		return function(e){
			alert(i);
		}
 	}
	for(i=0;i<nodes.length;i++){

		nodes[i].onclick = helper(i)
	}

}

总结:避免在循环中创建函数,它可能只会带来无谓的计算,还会引起混淆,正如上面那个糟糕的例子。我们可以先在循环之外创建一个辅助函数,让这个辅助函数再返回一个绑定了当前i值的函数,这样就不会导致混淆了。

最后

以上就是整齐书包最近收集整理的关于避免在循环中创建函数,它可能超出你的理想目的的全部内容,更多相关避免在循环中创建函数,它可能超出你内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部