Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304416
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站网址导航为大家提供关于网站网页设计设计相关的的教程知识。

  • 本篇文章具体介绍如下
<!DOCTYPE hTML> <html> <head> <meta charset="utf-8" /> <title>闭包演示</title> <style type="text/css"> p {background:gold;} </style> </head> <body onl oad="init();"> <p>产品 0</p> <p>产品 1</p> <p>产品 2</p> <p>产品 3</p> <p>产品 4</p> </body> </html>

以上场景是初学者经常碰到的。即获取hTML元素集合,循环给元素添加事件。在事件响应函数中(event handler)获取对应的索引。但每次获取的都是最后一次循环的索引。
原因是初学者并未理解JavaScript的闭包特性。通过element.onclick=function(){alert(i);}方式给元素添加点击事件。响应函数function(){alert(i);}中的 i 并非每次循环时对应的 i(如0,1,2,3,4)而是循环后最后 i 的值5。 或者说循环时响应函数内并未能保存对应的值 i,而是最后一次i 的值5。

了解了原因,摸索出了很多解决办法(纯粹是兴趣)。最先想到的前两种
1、将变量 i 保存给在每个段落对象(p)上
具体代码如下:
function init1() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
pAry[i].i = i;
pAry[i].onclick = function() {
alert(this.i);
}
}
}

2、将变量 i 保存在匿名函数自身
具体代码如下:
function init2() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
(pAry[i].onclick = function() {
alert(arguments.callee.i);
}).i = i;
}
}

后又想到了三种
3、加一层闭包,i 以函数参数形式传递给内层函数
具体代码如下:
function init3() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
(function(arg){
pAry[i].onclick = function() {
alert(arg);
};
})(i);//调用时参数
}
}

4、加一层闭包,i 以局部变量形式传递给内层函数
具体代码如下:
function init4() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
(function () {
var temp = i;//调用时局部变量
pAry[i].onclick = function() {
alert(temp);
}
})();
}
}

5、加一层闭包,返回一个函数作为响应事件(注意与3的细微区别)
具体代码如下:
function init5() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
pAry[i].onclick = function(arg) {
return function() {//返回一个函数
alert(arg);
}
}(i);
}
}

后又发现了两种
6、用Function实现,实际上每产生一个函数实例就会产生一个闭包
具体代码如下:
function init6() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
pAry[i].onclick = new Function("alert(" i ");");//new一次就产生一个函数实例
}
}

7、用Function实现,注意与6的区别
具体代码如下:
function init7() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i ) {
pAry[i].onclick = Function('alert(' i ')');
}
}

模拟windows平台的上下文菜单效果具体代码-javascript技巧R79AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

R79AIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

好了关于网站网页设计设计相关的这篇文章就给大家介绍到这里不明白的地方给本站留言。声明,本站内容来源于互联网,如果侵犯了你的权益请联系本站删除。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304416

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市