面试题之闭包
来源:互联网 发布:知乎怎么查看问题 编辑:程序博客网 时间:2024/05/22 10:35
什么是闭包?以下代码点击会输出什么?为什么?能大概说明白的话继续问能想出几种解决办法。
<!DOCTYPE HTML><html><head><meta charset="utf-8" /><title>闭包演示</title><style type="text/css"> p {background:gold;}</style><script type="text/javascript"> function init() { var pAry = document.getElementsByTagName("p"); for( var i=0; i<pAry.length; i++ ) { pAry[i].onclick = function() { alert(i); } }}</script> </head> <body onload="init();"> <p>产品 0</p> <p>产品 1</p> <p>产品 2</p> <p>产品 3</p> <p>产品 4</p> </body> </html>
什么是闭包的问题请参见博客揭开Javascript闭包的真实面目
点击每一个p都会弹出提示框,内容为5
解释:因为闭包会保存使其中的变量i一直存在内存中,for循环执行后i=5,所以所有的p都会弹出5;
修改方法一:
function init() { var pAry = document.getElementsByTagName("p"); for( var i=0; i<pAry.length; i++ ) { (function(n){ pAry[i].onclick=function(){ alert(n); } })(i) }}
修改方法二:
function init() { var pAry = document.getElementsByTagName("p"); for( var i=0; i<pAry.length; i++ ) { pAry[i].onclick=(function(n){ return function(){ alert(n); } })(i); }}
0 0
- 面试题之闭包
- 闭包经典面试题
- 闭包与变量的面试题
- javascript闭包经典面试题
- js 解析器 面试题 闭包
- 关于闭包的面试题
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- JavaScript同步、异步、回调执行顺序之经典闭包setTimeout面试题分析
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- JavaScript同步、异步、回调执行顺序之经典闭包(setTimeout面试题分析)
- 用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- 销售税面试题十编码实现之jar包
- TCP面试题(三)之粘包问题
- 前端面试题——js闭包
- 关于闭包的面试题引发的思考
- javascript 闭包,this,作用域,综合应用面试题
- UNITY gameobject代码中setacvtive(false)与面板中直接去掉勾 效果不一样
- Sicily 1914. Kingdoms
- linux新手实践笔记一:CentOS安装jdk,SAMBA共享目录的设置
- Sicily 1913. Slides
- Sicily 1912. Crop circles
- 面试题之闭包
- SPI bus
- Linux如何给单用户模式设置密码?
- android进程间通信-aidl的使用
- u-boot start.S中relocate自搬运部分分析,adr与ldr区别
- android的ShapeDrawable源码解析
- 记录
- [转]窗口之间的主从关系与Z-Order
- pxc测试机搭建过程