最近在学习《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>
<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>
例子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. 理论上不需要,高级这本书有提到过。
关于js 的函数和对象实现,javascript 高级编程讲的没有重点。
推荐: Pro.JavaScript.with.MooTools 前1,2 章,对这些基础的东西讲的很透彻。例子也很多。