有如下两段代码:
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(); 到底有什么区别  大大们详细解释下啊!!!

解决方案 »

  1.   

    var m = o.m()为什么不能执行 
    首先o.m是对象的一个属性(这个属性可能是方法,可能是属性)
    o.m()说明这个属性是个方法,且已经执行了。举一个不恰当的例子
    var i;
    i = 10var i = 10;这2个代码有什么区别吗?那么这个也是。你把方法当成变量就可以理解了~~
      

  2.   

    var m = o.m;o.m 这个m 就是一个函数的引用(可以理解成指针)!
    m() 加括号,就是调用函数
      

  3.   

    var o = {
        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。
      

  4.   

    没有括号就是函数声明,有括号就是函数调用
    你的代码没有什么区别。改一下就有区别了。var o = {
        m: function() {
            alert(this.length);
              return 55;
        },
        length: 1
    };
    第二段代码的m应该为55