我不会算原函数,帮忙解释下。
1个回答
展开全部
先解释一下这个语句:(foo.bar,foo.bar)()
(foo.bar,foo.bar) 整体作为表达式集合,返回最后一个表达式的结果,即(foo.bar,foo.bar)等价于 (foo.bar);而你这里两个表达式是一样的,没什么意义
所以,上面的语句可以写成这样(foo.bar)(),为什么会打印10,而不是打印9?
关键在于(foo.bar)的括号,根据上下文,foo.bar是个函数指针,所以你此处可以写成
(function(){
return this.o;
})(); //这里的this是window, 所以window.o自然是10喽
如果没有括号是什么样子呢,foo.bar(),这种情况下打印9,它表示调用foo对象的bar方法
所以,关键点是(foo.bar)的括号,这个括号改变了语义,即运算优先级
(foo.bar,foo.bar) 整体作为表达式集合,返回最后一个表达式的结果,即(foo.bar,foo.bar)等价于 (foo.bar);而你这里两个表达式是一样的,没什么意义
所以,上面的语句可以写成这样(foo.bar)(),为什么会打印10,而不是打印9?
关键在于(foo.bar)的括号,根据上下文,foo.bar是个函数指针,所以你此处可以写成
(function(){
return this.o;
})(); //这里的this是window, 所以window.o自然是10喽
如果没有括号是什么样子呢,foo.bar(),这种情况下打印9,它表示调用foo对象的bar方法
所以,关键点是(foo.bar)的括号,这个括号改变了语义,即运算优先级
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询