函数表达式返回而不是结果

时间:2014-06-21 13:15:50

标签: javascript function

您好我要通过脚本示例,我不明白结果

<script type="text/javascript">
    var o = {
        d: 11,
        m: function (){ 
            var that=this;

            return function(){return that.d;}
        }
    };

    alert(typeof o.m);

    var num = o.m();
    alert(num);

    var num = o.m()();
    alert(num);

</script>

我认为o.m执行o.m();函数会返回11但是当调用function(){return that.d;}实际返回11时它会返回o.m()();

我不明白。

1 个答案:

答案 0 :(得分:2)

  

我认为通过o.m()执行o.m函数; shoud返回11,但在调用o.m()()时返回function(){return that.d;};实际上返回11。

JavaScript中的函数是对象,就像任何其他对象一样。所以m

中的一行
return function() { return that.d;}

...在调用m时创建并返回一个函数。该行中没有调用它正在创建的功能。

由于m返回一个函数,当你调用它时,你会得到函数:

var x = o.m();

x现在是对o.m()调用创建的函数的引用。每次调用o.m()都会创建并返回 new 函数。

由于x引用了该函数,因此可以调用它:

console.log(x()); // 11

(它起作用的原因与函数m创建和返回的事实有关,在m调用的上下文中称为&#34; closure&#34;该上下文包含一个that变量m设置,以便它可以在它返回的函数中使用that.d。这里详细说明可能会让人感到困惑,但是当你重新开始时准备好了,别担心,closures are not complicated。)