薇薇2013 2011-12-26 14:41
浏览 242
已采纳

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……9
for(var i=0;i<funcs.lenght;i++){
document.write(funcsi + "<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……9
for(var i=0;i<funcs.lenght;i++){
document.write(funcsi + "<br/>");
}

</script>
<body>
</body>
</html>




    另外,我对闭包的概念理解得也不透彻,不太明白闭包的定义:“闭包是指有权访问另一个函数作用域中的变量的函数:,那么在什么情况下使用闭包呢?
     还有匿名函数的销毁,有一个疑问:匿名函数用完后,必须置为null吗?是因为闭包对活动对象的引用造成的吗?
     期待同仁赐教,不胜感激。
  • 写回答

2条回答 默认 最新

  • 慕慕珍珍 2011-12-26 14:41
    关注

    例子1中
    for(var i=0;i document.write(funcs[i]() + "
    ");

    }

    应该为:
    for(var i=0;i document.write(funcs[i]() + "
    ");

    }

    length是数组的长度,lenght不知道是什么。
    这个结果应该输出十个换行的10;

    例2的错误一样
    应该输入1、2、3...

    楼主注意length的拼写就可以了。

    最后两个问题:
    1. 需要的时候在使用闭包,并不是用闭包就好,这个和设计模式一样;
    2. 理论上不需要,高级这本书有提到过。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader
  • ¥45 谷歌浏览器出现开发者工具无法显示已创建的,但您可以调试已部署的代码。 状态代码 404, net::ERR HTTP RESPONSE CODE FAILURE
  • ¥15 chatgpt网页版侧边栏和模型切换点击没反应怎么办
  • ¥15 如何解决蓝牙通话音频突发失真问题
  • ¥15 安装opengauss数据库报错
  • ¥15 【急】在线问答CNC雕刻机的电子电路与编程
  • ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
  • ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
  • ¥15 Python pandas