首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • (BlueDestiny) 出道javascript的题, 顺带散分~ [已结贴,结贴人:BlueDestiny]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 00:19:41 楼主
    先不要运行, 把答案写出来再运行看结果.:)
    HTML code
    <script type="text/javascript"> //<![CDATA[ function bar(a, b) { alert(a); alert(b); } function foo(x, y) { x = 'never-online'; y = 'BlueDestiny'; bar.apply(null, arguments); } function foo2(x, y) { var x = 'never-online2'; var y = 'BluDestiny2'; bar.apply(null, arguments); } foo(1, 2); //目测foo函数里执行bar函数的打印结果 a=?, b=? foo2(1, 2); //目测foo2函数里执行bar函数的打印结果 a=?, b=? //]]> </script>
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 00:23:501楼 得分:0
    自己占一楼~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 00:31:552楼 得分:3
    //foo(1, 2);
    a:'never-online'
    b:'BlueDestiny'

    //foo2(1, 2);
    a:'never-online2'
    b:'BluDestiny2'

    对象拦截的应用
    换成call的写法如下:
    JScript code
    <script type="text/javascript"> //<![CDATA[ function bar(a, b) { alert(a); alert(b); } function foo(x, y) { x = 'never-online'; y = 'BlueDestiny'; bar.call(null, x, y); } function foo2(x, y) { var x = 'never-online2'; var y = 'BluDestiny2'; bar.call(null, x, y); } foo(1, 2); //目测foo函数里执行bar函数的打印结果 a=?, b=? foo2(1, 2); //目测foo2函数里执行bar函数的打印结果 a=?, b=? //]]> </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 00:46:203楼 得分:0
    再加一点吧,呵呵
    HTML code
    <script type="text/javascript"> //<![CDATA[ function bar(a, b) { alert(a); alert(b); } function showSomething(a) { alert(a); } function foo(x, y) { x = 'never-online'; y = 'BlueDestiny'; bar.apply(null, arguments); } function foo2(x, y) { showSomething(x); //输出x=? var x = 'never-online2'+x; var y = 'BluDestiny2'+y; bar.apply(null, arguments); } foo(1, 2); //目测foo函数里执行bar函数的打印结果 a=?, b=? foo2(1, 2); //目测foo2函数里执行bar函数的打印结果 a=?, b=? //]]> </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 01:00:294楼 得分:0
    前面的一样就不说了。

    //foo2(1, 2);
    showSomething(x); //输出x=?
    x=1,这个时候是传递进来的第一个参数
    //var x = 'never-online2'+x;
    x的值重新赋值,'never-online2'+x,此时后面的x在被重新赋值前,所以还是1
    x和arguments的x作用范围是一致的,是同一个值,这是JS和别的语言的不同之处^^
    x=never-online21
    y同理,y=BluDestiny22
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 01:03:515楼 得分:0
    x和arguments的x作用范围是一致的,是同一个值
    这个具体怎么表述呢,大意就是在JS中,
    重复定义的同一个作用范围的变量名的值以最后的值为准(同一片内存)
    也就是重复定义的后面的将覆盖前面的值、类型(弱类型语言的好处)等
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 01:08:506楼 得分:3
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 01:25:427楼 得分:3
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • btbtd
    • 等级:
    发表于:2008-06-13 06:39:368楼 得分:3
    ....对这种一运行就知道的东西...没兴趣...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 07:05:069楼 得分:3
    变量先被右面的使用,然后赋值给左面的。

    无它...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 10:13:5210楼 得分:3
    相当于重复申明一次变量而已,肯定会覆盖以前的变量值,
    Javascript里面的变量可以多次重量申明赋值。。

    [It is legal and harmless to declare a variable more than once with the var statement. If the repeated declaration has an initializer, it acts as if it were simply an assignment statement. ]
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 10:17:2711楼 得分:3
    有意思

    呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 10:23:0212楼 得分:3
    先接分再研究
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 11:09:0913楼 得分:3
    接分。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 11:17:4514楼 得分:3
    不錯,可以理解為arguments是RW的。 ^_^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 11:20:1115楼 得分:0
    Rank,最近很少見到你們幾個上線,是不是產品在趕進度啊? ^_^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mumuTiger
    • 等级:
    发表于:2008-06-13 12:04:2316楼 得分:3
    引用 12 楼 s_liangchao1s 的回复:
    先接分再研究
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • only_endure
    • 等级:
    发表于:2008-06-13 12:08:2517楼 得分:3
    引用 6 楼 mingxuan3000 的回复:
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 12:57:1018楼 得分:3
    jf...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 12:58:3419楼 得分:0
    showSomething(x); //输出 x=1 ?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muxrwc
    • 等级:
    发表于:2008-06-13 12:58:4020楼 得分:3
    一和二的结果是一样的。。。

    都是bluedestiny

    arguments比较特殊,它们的引用貌似类似于对象。。。

    不过如果arguments的参数,就是x或者y,为undefined时,则不会出现这样的情况了。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muxrwc
    • 等级:
    发表于:2008-06-13 12:59:4621楼 得分:0
    好比下面代码。。。

    JScript code
    <script type="text/javascript"> //<![CDATA[ function bar(a, b) { alert(a); alert(b); } function foo(x, y) { x = 'never-online'; y = 'BlueDestiny'; bar.apply(null, arguments); } function foo2(x, y) { var x = 'never-online2'; var y = 'BluDestiny2'; bar.apply(null, arguments); } foo(); //目测foo函数里执行bar函数的打印结果 a=?, b=? foo2(1, 2); //目测foo2函数里执行bar函数的打印结果 a=?, b=? //]]> </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muxrwc
    • 等级:
    发表于:2008-06-13 13:06:4822楼 得分:0
    就是说,没有初始化到的arguments,引用就不同了^^
    JScript code
    <script type="text/javascript"> //<![CDATA[ function bar(a, b) { alert(a); alert(b); } function foo(x, y) { x = 'never-online'; y = 'BlueDestiny'; bar.apply(null, arguments); } function foo2(x, y) { var x = 'never-online2'; var y = 'BluDestiny2'; bar.apply(null, arguments); } foo(1); //目测foo函数里执行bar函数的打印结果 a=?, b=? foo2(1, 2); //目测foo2函数里执行bar函数的打印结果 a=?, b=? //]]> </script>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 13:40:3923楼 得分:3
    jf + xuexi
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 14:32:2624楼 得分:3
    SF
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-13 20:49:2125楼 得分:3
    学习.....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mylibin
    • 等级:
    发表于:2008-06-14 03:27:1826楼 得分:3
    jf...\
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiangv
    • 等级:
    发表于:2008-06-14 09:18:2927楼 得分:3
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-14 12:04:3728楼 得分:3
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-14 13:24:1329楼 得分:3
    jf
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-14 17:28:0430楼 得分:3
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天