- 浏览: 122842 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
煎蛋就是幸福:
...
试读《跨终端Web》 -
xiaoshitoushifa:
最好把demo贴上啊!发一份到435065893@qq.com ...
漂亮的系统后台UI 欣赏 -
xiaoshitoushifa:
只有图片 没有demo 啊
漂亮的系统后台UI 欣赏
作用域链 《javascript DOM高级程序设计》 P35页
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="ADS-start.js"></script> <script type="text/javascript"> function initAnchors(){ for(var i=1;i<=3;i++){ var anchor = document.getElementById('anchor'+i); ADS.addEvent(anchor,'click',function(){ alert('my id is anchor '+i); }); } } ADS.addEvent(window,'load',initAnchors); </script> </head> <body> <ul> <li><a href="" id="anchor1">anchor1</a></li> <li><a href="" id="anchor2">anchor2</a></li> <li><a href="" id="anchor3">anchor3</a></li> </ul> </body> </html>
点击后都会弹出''my id is anchor 4'
我们想要的结果是我们点击第几个出现的就是相关的数字,'my id is anchor 1',为什么会这样呢?因为不的值实际上是在单击事件发生时才从作用域链中取得的,当单击事件发生时,initAnchors()已经执行完毕,因此i的值等于4,所以每个alert都会显示相同的信息。具体来说,当click事件侦听器被调用并在它的内部作用域中查找i的值时,结果没有找到,因为i的值在作用click事件侦听器的匿名函数中没有定义。
要得到正确的结果,需要把事件侦听器的注册转移到一个独立的函数中,并通过该函数的参数传递适当的值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script type="text/javascript" src="ADS-start.js"></script> <script type="text/javascript"> function registerListener(anchor,i){ ADS.addEvent(anchor,'click',function(){ alert('my id is anchor '+i); }); } function initAnchors(){ for(var i=1;i<=3;i++){ var anchor = document.getElementById('anchor'+i); registerListener(anchor,i); } } ADS.addEvent(window,'load',initAnchors); </script> </head> <body> <ul> <li><a href="" id="anchor1">anchor1</a></li> <li><a href="" id="anchor2">anchor2</a></li> <li><a href="" id="anchor3">anchor3</a></li> </ul> </body> </html>
由于在作用域链中定义了额外的函数和变量,提示信息中保持了正确的值。因为click事件侦听器现在的外部使用域变成了
registerListener()函数,该函数在其每个实例(每次调用registerListener()函数都会生成该函数的一个副本,以维护正确的变量作用域)的内部作用域中都为i维护了一个唯一值。
发表评论
-
javascript 数据类型判断
2014-10-13 14:44 757javascript 中判断数据类型有两种情况:1.基本数据 ... -
阻止事件追加
2014-10-11 12:04 892有些时候可以使用 e.stopPropagation(); ... -
试读《ECMAScript6入门》
2014-09-20 00:01 1326ECMA 对于前端开发工作的我并不陌生,《Ja ... -
javascript 宽度获取
2014-09-11 11:27 618网页可见区域宽:document.body.clientWi ... -
用jquery开发幻灯片播放功能(完整版)
2014-04-10 12:08 951很久没有写了,今天写一个简单的效果,幻灯片无限滚动和大家一起 ... -
看了一篇 “javascript 绝句欣赏”
2013-07-24 16:37 0看了一篇 “javascript 绝句欣赏”这里面的代码写 ... -
javascript 闭包的理解
2013-05-17 16:06 1175javascript中的作用域、 ... -
javascript forEach的实现
2013-04-10 11:43 643function forEach(ary,fn){ ... -
call理解
2013-04-09 16:40 878call使用情况 1.class.call(obj) ... -
富文本框参考
2013-01-31 17:56 0http://www.cnblogs.com/bluedrea ... -
JavaScript中prototype、__proto__、Function、Object等
2012-11-07 15:46 933javascript 灵活度太大了,比如定义一个类,就可以使用 ... -
javascript call的使用
2012-11-06 01:18 707Javascript中call的使用自己感觉蛮纠结的,根 ... -
javascript 继承的实现
2012-11-06 00:55 8531.类抄写 function parent(){ ... -
利用正则表达式实现去除所有HTML标签代码
2012-09-22 10:00 2620"<[^>]*>"; / ... -
javascript判断页面加载(页面下载)是否完毕
2012-09-11 16:03 1622首先要明确两个概念 1.window.onload:页面加载 ... -
如何发送简单请求
2012-08-30 15:08 843使用XMLHttpRequest 对象发送请求的基本步骤: ... -
javascript 正则 捕获组与非捕获组
2012-08-30 11:26 2675捕获组 语法: ... -
dom
2012-08-23 11:08 786继承在dom中的重要性,以下为a标记继承关系图 ... -
查看浏览器dom支持情况
2012-08-23 10:15 762查看浏览器dom支持情况 http://www.w3. ... -
浏览器之间的差别是处理dom对象的不同
2012-08-22 17:24 761dom是一组用来描述脚本怎样与结构化文档进行交互和访问的 ...
相关推荐
JavaScript作用域是编程中至关重要的...在实际编程中,我们还会遇到闭包、块级作用域(ES6中的`let`和`const`)等更高级的概念,这些都是基于作用域链的扩展,理解它们对于成为精通JavaScript的开发者来说必不可少。
JavaScript中的作用域链是编程中一个至关重要的概念,它决定了变量和函数的可访问性以及在不同作用域内的查找顺序。在深入理解作用域链之前,我们首先要了解什么是执行环境和变量对象。 执行环境,简单来说,就是...
JavaScript中的作用域链是理解变量查找和闭包的关键概念。作用域链主要涉及到函数执行上下文和全局执行上下文中的作用域。以下是对这个主题的详细解释: 首先,每个函数在创建时,都会有一个内部属性[[scope]],它...
下面我们从多个方面来详细探讨作用域链的概念、作用域链的层级关系、变量访问的性能影响,以及如何通过优化作用域链来提升程序性能。 首先,作用域是编程中一个基本的概念,它决定了变量和函数的可访问范围。在...
JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...
JavaScript是一种广泛用于网页和网络应用的脚本语言,它的核心特性包括原型链和作用域链。这两个概念是理解JavaScript中对象继承和变量访问的关键。 **作用域链** 1. **作用域生成**:每次JavaScript代码执行时,...
本PPT以一个小demo作为案例,进行透彻的分析作用域,以及作用域链产生的过程,帮助你深刻理解作用域。
### JavaScript作用域链(Scope Chain)初探 #### 一、引言 JavaScript的作用域链是一个重要的概念,尤其是在深入理解JavaScript执行机制时不可或缺的一部分。本文将通过对几个具体例子的分析来探讨JavaScript作用域...
在JavaScript编程中,作用域链和闭包是两个至关重要的概念,它们对于理解代码执行机制以及函数内部如何访问和管理变量至关重要。让我们深入探讨这两个概念。 首先,**作用域链**是JavaScript中的一种机制,它定义了...
我们已经知道一个执行上下文 的数据(变量、函数声明和函数的形参)作为属性存储在变量对象中。 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段。
这个活动对象与当前作用域链的顶部连接,形成了作用域链。作用域链允许函数访问其自身作用域内的变量,以及包含它的所有外部作用域的变量,直到全局作用域。 JavaScript引擎在解析代码时,会先进行预解析阶段,将...
"作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?" 标题“作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?”中,我们可以看到JavaScript引擎是如何选择相同的变量的。...
当尝试访问一个变量时,JavaScript引擎会首先在当前作用域中查找,如果找不到,就会沿着作用域链向上层作用域查找,直到找到变量或者到达全局作用域。如果在全局作用域仍找不到,那么就会引发错误。 以提供的代码为...
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...
JavaScript的作用域链是理解JavaScript执行环境的关键概念,它决定了变量和函数的可访问性。在JavaScript中,每个函数都有自己的作用域,而这些作用域按照特定的顺序组织起来,形成了作用域链。这个链帮助解析器在...
虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 作用域(Scope) 1. 什么是作用域 作用域是在运行时代码中的某些特定部分中...
03_作用域链.html