日期:2014-05-16  浏览次数:20333 次

这样函数调用,该如何解释?
JScript code

var foo = {
  bar: function () {
    alert(this);
  }
};
  
 1、foo.bar();//foo
 2、(foo.bar)();//foo
 3、(foo.bar = foo.bar)(); // global
 4、foo.bar = foo.bar; foo.bar();//foo
 6、(false || foo.bar)(); // global




------解决方案--------------------
我的理解是,js中小括号()有一个用法是(复杂表达式),这时的作用是取括号内的复杂表达式的最终结果为返回结果。也就是是(foo.bar = foo.bar)(3);等价于var func = (foo.bar = foo.bar); func(3); 此时this正好为window,(false || foo.bar)(5);同理
------解决方案--------------------
探讨

我小小谈谈我的看法,表喷我啊,1,2,4都是调用的foo.bar方法,而3和6的括号里都是再判断真假,那么返回的应该不是foo对象吧,我觉得,所以3和6应该是一样的,括号里都返回的是true,而其他的都是foo的方法调用。不知道各位大侠,我说的对不对。