使用闭包的注意点
2018-06-24 00:17:10来源:未知 阅读 ()
1.对捕获的变量只是个引用,不是复制;
function f() { var num = 1; function g() { //函数f()被执行之后,运行到此行,g.Scope =>f.LE; alert(num); } num++; g();//当函数g()第一次被执行时,f.LE里num=2; } f();//弹出2;说明弹出的num是对f.LE里num的引用,而不是复制
2.父函数每调用一次,都会创建一个新的词法环境,会产生不同的闭包;
function f() { var num = 1; return function () { num++; alert(num); } } var result1= f();//f()第一次被调用,创建了一个新的词法环境 result1.Scope => f.LE result1();//2 result1();//3 var result2 = f();//f()第二次被调用,又创建了一个新的词法环境 result2.Scope => f.LE result2();//2 result2();//3
3.循环中问题
<div id="1">1</div> <div id="2">2</div> <div id="3">3</div>
for(var i = 0;i<=3;i++){ //因为JS中没有块级作用域的概念,所以代码扫描到for循环这里时, //i是一个全局变量,并且,i=4;for循环只是给ele循环绑定了点击事件; //也就是说,onclick事件没有执行的时候,i的值已经是4了 var ele = document.getElementById("i"); ele.onclick = function () { alert(i);//所以当点击时,都弹出4 } }
应用闭包
var i; for(i =1;i<=3;i++){ var ele = document.getElementById(i); ele.onclick = (function (id) { return function () {//return一个函数给onclick事件 alert(id);//捕获父函数的id的值 } })(i);//循环第一次的时候,i=1,立即调用,产生一个闭包,将i作为参数传入,依次 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于jQuery UI 使用心得及技巧 2020-03-29
- js中去掉字串左右空格 2020-03-20
- Js中如何使用sort() 2020-03-18
- 使用JS在浏览器中判断当前网络连接状态的几种方法 2020-03-12
- 在JavaScript中尽可能使用局部变量的原因 2020-03-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash