//foo(1, 2); 
a:'never-online'
b:'BlueDestiny'//foo2(1, 2);
a:'never-online2'
b:'BluDestiny2'对象拦截的应用
换成call的写法如下:<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>

解决方案 »

  1.   

    再加一点吧,呵呵    <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>
      

  2.   

    前面的一样就不说了。//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
      

  3.   

    x和arguments的x作用范围是一致的,是同一个值
    这个具体怎么表述呢,大意就是在JS中,
    重复定义的同一个作用范围的变量名的值以最后的值为准(同一片内存)
    也就是重复定义的后面的将覆盖前面的值、类型(弱类型语言的好处)等
      

  4.   

    相当于重复申明一次变量而已,肯定会覆盖以前的变量值,
    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. ]
      

  5.   

    不錯,可以理解為arguments是RW的。 ^_^
      

  6.   

    Rank,最近很少見到你們幾個上線,是不是產品在趕進度啊? ^_^
      

  7.   

     showSomething(x); //输出 x=1 ?
      

  8.   

    一和二的结果是一样的都是bluedestinyarguments比较特殊,它们的引用貌似类似于对象不过如果arguments的参数,就是x或者y,为undefined时,则不会出现这样的情况了
      

  9.   

    好比下面代码<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>
      

  10.   

    就是说,没有初始化到的arguments,引用就不同了^^
    <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>
      

  11.   

    arguments扰乱了思路,其实不关它什么事情.只是x/y两个变量的重新赋值或者重写。
      

  12.   

    .
        [align=center]====  ====
    [/align]
    .
    贴子分数<20:对自已的问题不予重视。
    贴子大量未结:对别人的回答不予尊重。
    .
      

  13.   

    @风之石
    呵呵,的确有点忙,所以在群里也很少八卦了,很少去打winter了,都老老实实做事呢,你在深圳的感觉如何?