文翰弟
2015-05-29 09:21
请问 当 var func=outer(); 时func变量 的值为30吗。
感觉func()是再一次调用outer()函数的感觉,那 localVal变量就重新初始化了呀,怎么就与左边的不同?
func不是数字,注意func是一个函数对象,调用之后才返回了30的结果。
outer函数的返回值为 一个函数,所以func等于一个函数!
右边 这个函数 从下 往上看
var func = outer();
这里 func 复制为 函数 outer的执行结果,那在往上看,函数 outer 执行后的 结果是什么呢
function outer(){ var localVal = 30; return function(){ return localVal; } }
一个函数的的结果 如果没有返回值的话 默认是 'undefined',如果有返回值的话 就是返回 return 后面语句的执行结果。所以outer() 应该返回以下结果
function(){ return localVal; }
可以通过命令行工具 来验证 输入 func 返回的就是这个了
然后我们看到 返回的结果是一个匿名函数(没有名字的函数)。好了 这个函数运行后返回的是 localVal 这个值。可以理解为 是从他的'父函数'那里得到的。那么为什么可以获得 '父函数'里的变量呢,这就牵扯到闭包了,闭包这个课程里说的有,可以再仔细看看或者查阅一下资料
右边:
func=function(){
return localVal;
}
这是一种常见的闭包写法
JavaScript深入浅出
281099 学习 · 1020 问题
相似问题