前端面试题——js闭包

什么是闭包?以下代码点击

会输出什么?为什么?能大概说明白的话继续问能想出几种解决办法。

==========

出错:获取HTML元素集合,循环给元素添加事件。在事件响应函数中(event handler)获取对应的索引。但每次获取的都是最后一次循环的索引。 

出错原因:初学者并未理解JavaScript的闭包特性。通过element.οnclick=function(){alert(i);}方式给元素添加点击事件。响应函数function(){alert(i);}中的 i 并非每次循环时对应的 i(如0,1,2,3,4)而是循环后最后 i 的值5。 或者说循环时响应函数内并未能保存对应的值 i,而是最后一次i++的值5。 

解决方法:见html代码注释部分


 
 
 
 
闭包演示 
 
   
   
   

产品 0

产品 1

产品 2

产品 3

产品 4



你可能感兴趣的:(前端)