JavaScript的闭包的相关问题

问题描述

最近在学习《JavaScript高级程序设计》,其中关于闭包的两个例子,我照着书中的例子运行时,浏览器不打印也不报错,由于我是初学,才疏学浅,发现似乎是createFunctions()的循环不太对,但也没有调试成功,现在贴出来,还望大家共同讨论,各抒己见。 下面我把两个例子贴出来,希望有兴趣的朋友能够回复,看看是什么原因造成的: 例子1: <html><head><title>对象</title></head><script type="text/javascript">function createFunctions(){ var result = new Array(); for(var i=0;i<10;i++){ result[i] = function(){ return i; }; } return result;}var funcs = createFunctions();//分别输出0、1、2……9for(var i=0;i<funcs.lenght;i++){ document.write(funcs[i]() + "<br/>"); }</script><body></body></html>例子2: <html><head><title>对象</title></head><script type="text/javascript">function createFunctions(){ var result = new Array(); for(var i=0;i<10;i++){ result[i] = function(num){ return function(){ return num; }; }(i); } return result;}var funcs = createFunctions();//分别输出0、1、2……9for(var i=0;i<funcs.lenght;i++){ document.write(funcs[i]() + "<br/>");}</script><body></body></html> 另外,我对闭包的概念理解得也不透彻,不太明白闭包的定义:“闭包是指有权访问另一个函数作用域中的变量的函数:,那么在什么情况下使用闭包呢? 还有匿名函数的销毁,有一个疑问:匿名函数用完后,必须置为null吗?是因为闭包对活动对象的引用造成的吗? 期待同仁赐教,不胜感激。

解决方案

例子1中for(var i=0;i<funcs.lenght;i++){ document.write(funcs[i]() + "<br/>"); } 应该为:for(var i=0;i<funcs.length;i++){ document.write(funcs[i]() + "<br/>"); } length是数组的长度,lenght不知道是什么。这个结果应该输出十个换行的10;例2的错误一样应该输入1、2、3...楼主注意length的拼写就可以了。最后两个问题:1. 需要的时候在使用闭包,并不是用闭包就好,这个和设计模式一样;2. 理论上不需要,高级这本书有提到过。
解决方案二:
关于js 的函数和对象实现,javascript 高级编程讲的没有重点。推荐: Pro.JavaScript.with.MooTools 前1,2 章,对这些基础的东西讲的很透彻。例子也很多。

时间: 2024-11-05 19:35:37

JavaScript的闭包的相关问题的相关文章

深入理解JavaScript的闭包特性

有个网友问了个问题,如下的html,为什么点击所有的段落p输出都是5,而不是alert出对应的0,1,2,3,4. <!DOCTYPE HTML>  <html>  <head>  <meta charset="utf-8" />  <title>闭包演示</title>  <style type="text/css">      p {background:gold;}   <

JavaScript创建闭包的两种方式的优劣与区别分析

  这篇文章主要介绍了JavaScript创建闭包的两种方式的优劣与区别分析的相关资料,需要的朋友可以参考下 通常JavaScript创建闭包比较常用的有两种方式. 构造函数方式: ? 1 2 3 new function() { var 变量... } 内联执行方式: ? 1 2 3 (function() { var 变量... })(); 在JavaScript内部运行机制下他们有什么区别?用哪种方式创建比较好?它与其它方式创建的闭包相比有什么优势? 我是这样理解的: 区别: 第一个:子方

JavaScript中闭包之浅析解读(必看篇)_javascript技巧

JavaScript中的闭包真心是一个老生常谈的问题了,最近面试也是一直问到,我自己的表述能力又不能完全支撑起来,真是抓狂.在回来的路上,我突然想到了一个很简单的事情,其实我们在做项目时候,其实就经常用到闭包的,可是面试问的时候,回答又往往是我们经常搜到的答案,唉 不管是应付面试 还是真的想学点东西 ,我也用自己的理解跟大家分享一下,书面化就避免不了了的. 1.闭包是什么? 红宝书中曰:"是指有权访问另外一个函数作用域中的变量的函数." 简单的说,JavaScript允许使用内部函数-

学习javascript的闭包,原型,和匿名函数之旅_javascript技巧

本文通过示例给大家介绍javascript的闭包,原型,和匿名函数,具体详情请看下文. 一 .>关于闭包 理解闭包 需要的知识 1.变量的作用域 例1: var n =99; //建立函数外的全局变量 function readA(){ alert(n); //读取全局变量 } readA(); //执行此函数 例2: function readB(){ var c = 9; function readC(){ console.log(c); //ok c可见 } return readC; }

跟我学习javascript的闭包_javascript技巧

JavaScript 闭包究竟是什么? 用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑.陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQuery基础教程 的附录,发现附录A对JavaScript的闭包的介绍简单易懂,于是借花献佛总结一下. 1.定义 闭包:是指有权访问另外一个函数作用域中的变量的函数.创建闭包的常见方式就是在一个函数内部创建另外一个函数. 直接上例子 function a(){ v

浅谈JavaScript的闭包函数_javascript技巧

在JavaScript中,闭包恐怕是很多人不能理解的一个概念了,甚至很多人也会把闭包和匿名函数混淆. 闭包是有权访问另一个函数作用域中的变量的函数.首先要明白的就是,闭包是函数.由于要求它可以访问另一个函数的作用于中的变量,所以我们往往是在一个函数的内部创建另一个函数,而"另一个函数"就是闭包. 比如之前提到过的作为比较函数: function createComparisonFunction(propertyName){ return function(object1,object2

JavaScript创建闭包的两种方式的优劣与区别分析_javascript技巧

通常JavaScript创建闭包比较常用的有两种方式. 构造函数方式: new function() { var 变量... } 内联执行方式: (function() { var 变量... })(); 在JavaScript内部运行机制下他们有什么区别?用哪种方式创建比较好?它与其它方式创建的闭包相比有什么优势? 我是这样理解的: 区别: 第一个:子方法可以共享变量 第二个:内部子方法共享变量 比较: 我认为内联的比较好: 优势: 一般内联的创建是按需索要内存,因为只是局部执行的变量在内存里

javascript使用闭包模拟对象的私有属性和方法_javascript技巧

最近因为做了一个项目,其中涉及到了js私有方法,这个概念在其语言里面是很常见的,很多语言都有private这个关键字,只要在一个类的前面加上private就表示申明了一个私有方法,但是javascript在面向对象的方面没有那么多的特征,他没有专门的private关键字,.要做到这一点就必须使用js自己的一些特性来变相的完成. 首先javascript里面有一个高级特性叫闭包,简单的说js的闭包可以理解成是一种现象或者特性,一般出现在两个函数嵌套的情况下,看例子: function a(){ v

JavaScript预解析及相关技巧分析_javascript技巧

本文实例讲述了JavaScript预解析及相关技巧.分享给大家供大家参考,具体如下: 变量 同样,以这两个小例子的错误对比提示开始. alert(y1); //代码段1 var y1 = 'dddd'; alert(y2); //代码段2 // alert(typeof y2); y2 = 'xxxxx'; 先思考一下,为什么一个会提示 undefined , 一个却抛出变量未定义的错..先看JavaScript的解析过程. javascript在执行过程之前,会做一件事件"预解析".