标题: [讨论] 某人发给我的邪恶代码
月影
超级版主
Rank: 8Rank: 8



UID 24714
精华 9
积分 4243
帖子 1553
威望 1918
阅读权限 150
注册 2005-3-9
状态 离线
 
发表于 2009-10-23 16:47  资料  个人空间  主页 短消息  加为好友  QQ
某人发给我的邪恶代码

嗯,不点名了,看看吧。。。。。。


function sum(n)
{
    var 
0sum 0;
    while(
1)
    {
        try{
            return 
sum;
        }
        
finally
        
{
            
sum+=++i;
            if(
i<=n) continue;
        }
    }




顶部
temade
大恐龙
Rank: 4
忁走の腦驂瀦


UID 5206
精华 0
积分 846
帖子 496
威望 489
阅读权限 50
注册 2003-8-27
来自 北京
状态 离线
 
发表于 2009-10-23 17:21  资料  个人空间  短消息  加为好友 
真是很邪恶........写这个的兄弟也太油菜花了~~~
恩...firebug控制台下测试了一把,调用了sum(100)三次,暂时没有崩浏览器,ie下没敢试.....





设计模式!设计模式!!设计模式!!!设计模式……设计模式…………设计模式………………还是不会……
顶部
abcdreamer
霸王龙
Rank: 6Rank: 6


UID 94366
精华 0
积分 2774
帖子 976
威望 951
阅读权限 70
注册 2009-4-18
来自 银河系
状态 离线
 
发表于 2009-10-23 17:22  资料  个人空间  短消息  加为好友  QQ
ie8测试,没问题,很正常

顶部
zehee
爬虫
Rank: 2



UID 75500
精华 0
积分 155
帖子 42
威望 42
阅读权限 20
注册 2007-9-5
状态 离线
 
发表于 2009-10-23 17:41  资料  个人空间  短消息  加为好友 
这是要搞什么飞机……

顶部
叶子
爬虫
Rank: 2



UID 6849
精华 0
积分 164
帖子 37
威望 34
阅读权限 20
注册 2003-11-21
来自 上海
状态 离线
 
发表于 2009-10-23 21:44  资料  个人空间  主页 短消息  加为好友  QQ
昨天半夜收到的

顶部
darkdrium
小虫
Rank: 1



UID 93039
精华 0
积分 11
帖子 4
威望 4
阅读权限 10
注册 2008-10-31
状态 离线
 
发表于 2009-10-23 22:33  资料  个人空间  短消息  加为好友 
没看懂,大牛们解说下?

顶部
wllllll
大恐龙
Rank: 4


UID 35854
精华 0
积分 990
帖子 531
威望 535
阅读权限 50
注册 2005-8-24
状态 离线
 
发表于 2009-10-23 23:55  资料  个人空间  短消息  加为好友 
<script type="text/javascript" language="javascript">
function sum(n)
{
    var i = 0, sum = 0;
    //1为真,所以循环
    while(1) {
        try{
            //反回数据,不再继续循环,但是有finally,即使return数据也必须执行finally中的代码
            return sum;
        } finally {
            //在返回后还会执行的代码
            sum+=++i;
            //如果i小于或者等于n,那么放弃剩余所有命令,重新执行循环。
            //但是由于作者代码写错了,在第一次执行后i<=n为假,导致恶意代码不恶意。
            //如果要真正成为恶意代码,更改到:i>=n
            if(i<=n) continue;
        }
    }
}
sum(0)
</script>

顶部
月影
超级版主
Rank: 8Rank: 8



UID 24714
精华 9
积分 4243
帖子 1553
威望 1918
阅读权限 150
注册 2005-3-9
状态 离线
 
发表于 2009-10-24 10:00  资料  个人空间  主页 短消息  加为好友  QQ
晕倒。。。
拜托。。。这个不是恶意代码

这段代码只是求1+2+3+......+n
。。。。。。

顶部
girl
小恐龙
Rank: 3Rank: 3


UID 24249
精华 0
积分 379
帖子 199
威望 271
阅读权限 30
注册 2005-3-2
状态 离线
 
发表于 2009-10-24 15:32  资料  个人空间  短消息  加为好友 
对不起,wllllll,我错了。

[ 本帖最后由 girl 于 2009-10-25 20:04 编辑 ]

顶部
zehee
爬虫
Rank: 2



UID 75500
精华 0
积分 155
帖子 42
威望 42
阅读权限 20
注册 2007-9-5
状态 离线
 
发表于 2009-10-24 15:57  资料  个人空间  短消息  加为好友 
我理解力有限,我觉得这代码只是要实现这个:

QUOTE:
function sum(n)
{
    var i = 0, num = 0, S = [];
    while(i<=n)
    {
            S.push(num);
            num+=++i;
    }
    return S;
}



   提示:您可以先修改部分代码再运行


顶部
zehee
爬虫
Rank: 2



UID 75500
精华 0
积分 155
帖子 42
威望 42
阅读权限 20
注册 2007-9-5
状态 离线
 
发表于 2009-10-24 16:05  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 月影 于 2009-10-24 10:00 发表
晕倒。。。
拜托。。。这个不是恶意代码

这段代码只是求1+2+3+......+n
。。。。。。

狂晕!~~
难道是:
var sum = function(n){if(n>1){return (1+n)*n/2;}}

顶部
wllllll
大恐龙
Rank: 4


UID 35854
精华 0
积分 990
帖子 531
威望 535
阅读权限 50
注册 2005-8-24
状态 离线
 
发表于 2009-10-24 19:58  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 girl 于 2009-10-24 15:32 发表



这位大虾装懂还装得挺专业...

靠你的小PP

顶部
月影
超级版主
Rank: 8Rank: 8



UID 24714
精华 9
积分 4243
帖子 1553
威望 1918
阅读权限 150
注册 2005-3-9
状态 离线
 
发表于 2009-10-24 21:12  资料  个人空间  主页 短消息  加为好友  QQ
9楼好像是大肉的马甲......

顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2009-10-24 22:22  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 月影 于 2009-10-24 21:12 发表
9楼好像是大肉的马甲......

hmmmmmmmmm 大肉怎么做这种事情 8厚道啊





顶部
los
霸王龙
Rank: 6Rank: 6


UID 81082
精华 0
积分 2527
帖子 966
威望 865
阅读权限 70
注册 2007-12-28
状态 离线
 
发表于 2009-10-25 20:24  资料  个人空间  短消息  加为好友 
人生无奈啊





回到以前自由自在的生活中~~~
顶部
lifesinger
小恐龙
Rank: 3Rank: 3



UID 91925
精华 3
积分 465
帖子 84
威望 178
阅读权限 30
注册 2008-10-9
状态 离线
 
发表于 2009-10-25 21:42  资料  个人空间  主页 短消息  加为好友 
这个问题 ECMA-262 有很好的解释:

QUOTE:
The production TryStatement : try Block Finally is evaluated as follows:
1. Evaluate Block.
2. Evaluate Finally.
3. If Result(2) .type is normal, return Result(1).
4. Return Result(2).

例子:

   提示:您可以先修改部分代码再运行


顶部
cloudgamer
无忧元老
Rank: 8Rank: 8



UID 56188
精华 7
积分 5602
帖子 963
威望 3969
阅读权限 90
注册 2006-9-7
来自 顺德
状态 离线
 
发表于 2009-10-26 08:40  资料  个人空间  主页 短消息  加为好友 
If Result(2) .type is normal

什么算是normal呢





顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2009-10-26 13:21  资料  个人空间  短消息  加为好友 
回复 #17 cloudgamer 的帖子

break是break
continue是continue
throw是throw
return是return
其它的是normal


break continue throw return
它们又被称为abrupt completion

[ 本帖最后由 winter 于 2009-10-26 13:31 编辑 ]





顶部
winter
超级版主
Rank: 8Rank: 8
5毛发一贴,千里不留行。


UID 65747
精华 11
积分 7582
帖子 3353
威望 3335
阅读权限 150
注册 2007-2-27
状态 离线
 
发表于 2009-10-26 13:30  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 lifesinger 于 2009-10-25 21:42 发表
这个问题 ECMA-262 有很好的解释:



例子:


function test() {
        try { return 1; }
        finally { return 2; }
    }
    alert(test()); // 1 or 2 ?


这段解释告诉我们 事实上try finally并不能用于捕获异常 它仅仅是保证finall执行用的
所以对于那些abrupt completion
try finally会做相同处理





顶部
los
霸王龙
Rank: 6Rank: 6


UID 81082
精华 0
积分 2527
帖子 966
威望 865
阅读权限 70
注册 2007-12-28
状态 离线
 
发表于 2009-10-26 15:16  资料  个人空间  短消息  加为好友 
记得以前有个人发了一篇利用finally来防止内存泄漏的贴子





回到以前自由自在的生活中~~~
顶部
 



当前时区 GMT+8, 现在时间是 2010-7-31 04:53
苏ICP备05080427号

Powered by Discuz! 5.5.0  © 2001-2007 51JS.COM
Processed in 0.350731 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 无忧脚本 - Archiver