有如下两段代码:
1>
var o = {
m: function() {
alert(this.length);
},
length: 1
};
var m = o.m;
m(); 2>
var o = {
m: function() {
alert(this.length);
},
length: 1
};
var m = o.m();
第二段代码var m = o.m();是一个声明为什么也能执行呢?
还有 不清楚var m = o.m;m(); 和var m = o.m(); 到底有什么区别 大大们详细解释下啊!!!
首先o.m是对象的一个属性(这个属性可能是方法,可能是属性)
o.m()说明这个属性是个方法,且已经执行了。举一个不恰当的例子
var i;
i = 10var i = 10;这2个代码有什么区别吗?那么这个也是。你把方法当成变量就可以理解了~~
m() 加括号,就是调用函数
m: function() {
alert(this.length);
},
length: 1
};
var m = o.m;
m();
表示一个对象o有一个方法m和一个属性length并且值为1。
var m=o.m表示声明一个变量并且该变量是引用变量,该引用变量引用对象o的方法m,及同时引用了一个匿名函数function() {
alert(this.length);
}
所以,m()表示调用这个匿名函数。
而var m = o.m();表示声明一个变量,该变量为值类型, 把对象o调用方法m的结果赋给该变量,该值为undefined。
你的代码没有什么区别。改一下就有区别了。var o = {
m: function() {
alert(this.length);
return 55;
},
length: 1
};
第二段代码的m应该为55