您好我要通过脚本示例,我不明白结果
<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()();
。
我不明白。
答案 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。)