注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

JavaScript 的 Closure 连某些静态语言都不如……  

2008-01-15 11:46:00|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Javascript
<html><body><script>
var d = [];
for(var i = 0; i < 10; i++) {
    var j;
    d.push(function() {
        return j;
    });
    j = i;
}
for(var i = 0; i < 10; i++) {
    alert(d[i]());
}
</script></body></html>
C#
  class Program {
delegate int D();
static void Main(string[] args) {
D[] d = new D[10];
for (int i = 0; i < 10; i++) {
int j = 0;
d[i] = delegate() {
return j;
};
j = i;
}
for (int i = 0; i < 10; i++) {
Console.WriteLine(d[i]());
}
}
}
我测过 IE7、Firefox 3 Beta 2 的 JavaScript,还有 Flex 2 里面的 ActionScript ,发现这些 ECMAScript 里面返回的循环内部的Closure 都是同一个(每一个 alert 打印出来结果都是 9)。以前写 JavaScript 代码的时候遇到这个问题也没有细想,另外写一个单独的函数来返回 Closure 就行了。这个毛病在其它几乎所有的脚本语言里面都没有,至少 lua 的 closure 没有这个问题。可是今天用起 C# 2.0,发现连 C# 这种静态语言都会生成一个个不同的 closure(打印出来从 0 到 9)。真是搞不懂,为什么 ECMAScript 要设计成这样。
  评论这张
 
阅读(354)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018