感觉
var baz=100;
var foo={bar:function(){return this.baz;},baz:1};
var b=(function(){
    return arguments[0]();
})(foo.bar);
alert(b);和
var baz=100;
var foo={bar:function(){return this.baz;},baz:1};
var b=(function(xx){
    return xx();
})(foo.bar);
alert(b);
等价等高手解答

解决方案 »

  1.   

    当然一样,function(xx){...} xx是形参 ;不论形参是否定义,所有参数按顺序将直接保存到arguments数组中
      

  2.   


    var baz=100;
    var foo={bar:function(){return this.baz;},baz:1};
    var b=(function(){
      arguments.baz=4;
      return arguments[0]();
    })(foo.bar);
    alert(b);表示不明白为什么要这么写,这样写后患无穷啊,this作用域不易把握。
    PS:针对这个例子,执行b的赋值语句时,foo.bar中的this指向的是函数
    function(){
      arguments.baz=4;
      return arguments[0]();
    };的arguments对象(参数集合对象)
      

  3.   

    函数分两种情况,一种是以对象的方法出现,这时的this指向应该是对象;另一种是普通的函数调用,这里的第二个函数应该是普通的函数调用,因为你把对象的方法(一个函数)赋值给另一个变量,然后变量进行了调用,所以普通调用的this指向应该是window对象,所以baz自然是一百了。但是 你第一是用argument作得,换句话说你用的是对象的属性的调用 ,但是Arguments没有baz 所以输出undefinedvar baz=100;
    var foo={
    bar:function(){
    console.log(this);
    return this.baz;},
    baz:1
    };
    var b=(function(){
      return arguments[0]();
    // console.log(arguments[0]);
    })(foo.bar);
    alert(b);
    希望对你有用
      

  4.   

    但是 你第一是用argument作得,换句话说你用的是对象的属性的调用 ,但是Arguments没有baz 所以输出undefined?什么叫argument作得对象的属性的调用?哪个对象调哪个属性Arguments没有baz?
      

  5.   

    七楼说的有道理 ,是this指针问题
    var foo={bar:function(){return this.baz;},baz:1};
    要想访问到bar这个函数,必须用foo对象调用,this.baz才能访问到;
    把foo.bar作为参数赋值给xx,执行xx()调用的时候this指针已经不再是foo对象,所以返回undefined
      

  6.   

    var baz=100;
    var foo={bar:function(){return this.baz;},baz:1};
    alert(foo.bar());
    var b=(function(xx){
      return xx();
    })(foo.bar);
    alert(b);
    var bb=(function(){
      return arguments[0]();
    })(foo.bar);
    alert(bb);
    后两个等价于:
    var b=(function(xx){
       xx=function(){return this.baz;}
      return xx();
    })(foo.bar);
    var bb=(function(){
      arguments.0=function(){return this.baz;}
      return arguments[0]();
    })(foo.bar);
    此时传递的foo.bar只是函数对象,是对这个function的引用,当执行时会,依据调用形式给this赋值,
    第一个的this 是window,第二个的是Argument对像,foo.bar()的this是foo对像,对属性的查询是沿着this,this.prototype查找的,所以返回的结果不同