感觉
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);
等价等高手解答
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);
等价等高手解答
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对象(参数集合对象)
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);
希望对你有用
var foo={bar:function(){return this.baz;},baz:1};
要想访问到bar这个函数,必须用foo对象调用,this.baz才能访问到;
把foo.bar作为参数赋值给xx,执行xx()调用的时候this指针已经不再是foo对象,所以返回undefined
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查找的,所以返回的结果不同