闭包是JS中重点难点,自己看了N多文章和实例,检测一下!
下面这个ul,如何点击每一列的时候alert其index? <ul id=”test”> <li>这是第一条</li><li>这是第二条</li><li>这是第三条< /li> </ul>
按照常规的思路,我们会像下面这样子写;那么运行的结果是什么呢?0、1、2、3 它只是把for循环跑了一遍,关键点来了,我们如何获取每个li的index属性?oTestList是一个数组,但很遗憾的是,通过getElementsByTagName取得的数组是没有index属性的,所以没法直接获取点击时的Index,那么我们只有自己写个方法了!
看看我们自己写的方法吧!正是采用了闭包的相关原理,我这里采取了两种写法,但本质是一样的
//第一种写法,两者的本质都是一样的,这种写法更容易理解 function getIndex(){ var oTestList = document.getElementById("test").getElementsByTagName("li"); for (var i = 0; i < oTestList.length; i++) { oTestList[i].onclick = new popNum(i); } } function popNum(oNum){ return function(){ alert('您单击的是第'+oNum+'项'); } } window.onload = function(){ getIndex(); }
//第二种写法,这种写法更能体现闭包的实质 window.onload=function(){ var oTestList = document.getElementById("test").getElementsByTagName("li"); for (var i = 0; i < oTestList.length; i++){ function listFunc(i){ this.clickFun = function(){ alert("列表项" + i); } } var newFunc = new listFunc(i);//此处必须新建 oTestList[i].onclick = newFunc.clickFun; } }
如果大家还有什么比较典型的例子,就贴上来一起讨论一下吧!
发表评论
-
测试代码高亮
2012-10-22 15:28 0HTML <h3 class="sh_a ... -
href="javascript:scroll(0,500)"
2012-08-28 10:44 483<a href="javascript:scr ... -
网站与博文收藏
2011-09-09 19:44 882看见好的文章总是忍不住收藏一下! http://w3h ... -
FF下面实现outerHTML
2011-07-20 22:06 835http://w3help.org/zh-cn/causes/ ... -
如何实现图片预加载
2011-07-19 10:29 710function loadImage(url, callbac ... -
数组排序专题(二)------快速排序(大量数据)
2011-07-14 14:14 1184看了阮一峰介绍的快速排序方法,觉得受益匪浅 下面是他的链接h ... -
javascript常见扩展方法
2011-07-08 14:44 9451.去掉数组中重复的值 Array.protot ... -
数组排序专题(一)---冒泡排序
2011-06-14 14:44 947最基本的题目:一个数组,未知长度,按从小到大的顺序进行排列;现 ... -
删除数组中重复的元素
2011-06-07 11:02 799//删除数组中重复的元素 var numArr=[6, ... -
javascript中style后面的属性与CSS中的属性区别
2011-05-06 14:36 792在javascript中style后面的属性与 ... -
解淘宝面试题
2011-05-04 16:53 950从网上搜出了淘宝的面试题,做了一下,把代码贴出来,一起讨论下! ... -
获取div、网页、屏幕、浏览器的宽高
2011-05-03 17:37 0test -
type属性是否可以动态修改?
2011-04-23 10:34 639在IE中,type为只读,无法动态修改,除非是通过create ... -
某公司js试题(转来的)
2010-11-26 15:31 1187首先多谢BlueCat,这是从他那转过来的; 1、笔试 ... -
前端开发工程师面试题(转来的)
2010-10-08 16:09 741前端工程师面试题!!! ...
相关推荐
首先,我们来看一个简单的闭包实例。假设我们有一个外部函数`outerFunction`,它内部定义了一个返回的内部函数`innerFunction`: ```javascript function outerFunction() { var outerVar = 'I am from outer ...
Python闭包实例closure.py 简单示例闭包的使用 简单示例闭包的使用
- 常见的一个闭包实例是计数器,例如: ```javascript function createCounter() { let count = 0; return function() { count++; console.log(count); }; } const counter = createCounter(); counter()...
JavaScript中的闭包是一种重要的编程概念,它涉及到函数、作用域和变量持久化。闭包本质上是函数能够记住并访问其词法作用域内的变量,即使该函数已经执行完毕且其外部作用域不再存在。这种特性使得闭包成为...
JavaScript中的闭包是一种高级特性,它允许函数访问和操作其自身范围内的变量,即使在其外部定义的函数已经执行完毕。这种特性使得闭包在管理作用域、数据隐藏和内存持久化方面具有重要作用。 首先,我们要了解函数...
3. **返回闭包**:闭包可以作为函数的返回值,这使得我们可以创建“工厂”函数来生成不同的闭包实例。 ```php function createCounter() { $count = 0; return function() use (&$count) { return ++$count; ...
数据科学三元闭包验证是数据挖掘和网络分析中的一个重要概念,主要研究的是在社会网络或图论中,三个人之间的关系强度如何影响彼此之间的连接。三元闭包是指如果个体A与B有联系,B与C有联系,通常情况下,A与C之间也...
在描述中提到的博客链接中,可能包含了闭包的实例和深入解析。通常,闭包的常见应用场景包括: 1. **数据封装**:通过闭包,可以在函数内部创建私有变量,防止外部直接访问和修改,保证数据的安全性。例如: ```...
例如,`Function`构造函数创建的函数实例(如`Fn`)有`prototype`属性,这是一个对象,通常包含了构造函数的`constructor`属性,指向该构造函数自身。另一方面,每个对象都有`__proto__`属性,它指向创建该对象的...
闭包是JavaScript中的一个重要概念,它是指有权访问另一个函数作用域中的变量的函数。在JavaScript编程中,闭包的应用非常广泛,它不仅可以帮助我们创建私有变量,还能为模块化编程提供强大的支持。 在闭包的定义中...
通常,我们会为类的实例提供一个`getStatus`方法来获取私有属性`status`。但如果`status`是公共属性,这样做似乎显得多余。然而,通过闭包,我们可以创建一个立即执行的函数表达式(IIFE),它返回一个包含`get...
下面是一些闭包的经典实例: 1. 在`car`函数中,`fn`能够访问并修改外部的`speed`变量,即使`car`执行完毕,`speed`仍然被`speedUp`所引用,形成闭包。如果去掉`return fn`,`speed`将无法被保留,因为没有引用指向...
一般来说闭包这个概念在很多语言中都有涉及,本文主要谈谈python中的闭包定义及相关用法。Python中使用闭包主要是在进行函数式开发时使用。详情分析如下: 一、定义 python中的闭包从表现形式上定义(解释)为:如果...
首先,让我们通过实例来理解闭包。例1中,`make_adder`函数接收一个参数`addend`,并定义了一个内部函数`adder`,`adder`函数内部引用了`addend`。当`make_adder`被调用并返回`adder`时,`addend`的值被保存在闭包中...