为了账号安全,请及时绑定邮箱和手机立即绑定

有人能帮我吗

http://img1.sycdn.imooc.com//5567be5b0001e11c07390397.jpg

请问 当 var func=outer(); 时func变量 的值为30吗。

感觉func()是再一次调用outer()函数的感觉,那 localVal变量就重新初始化了呀,怎么就与左边的不同?

正在回答

4 回答

func不是数字,注意func是一个函数对象,调用之后才返回了30的结果。

0 回复 有任何疑惑可以回复我~

outer函数的返回值为 一个函数,所以func等于一个函数!

0 回复 有任何疑惑可以回复我~

右边 这个函数 从下 往上看

var func = outer();

这里 func 复制为 函数 outer的执行结果,那在往上看,函数 outer 执行后的 结果是什么呢

function outer(){
    var localVal = 30;
    return function(){
       return localVal;
    }
}

一个函数的的结果 如果没有返回值的话 默认是 'undefined',如果有返回值的话 就是返回 return 后面语句的执行结果。所以outer() 应该返回以下结果

function(){
    return localVal;
}

可以通过命令行工具 来验证 输入 func 返回的就是这个了

然后我们看到 返回的结果是一个匿名函数(没有名字的函数)。好了 这个函数运行后返回的是 localVal 这个值。可以理解为 是从他的'父函数'那里得到的。那么为什么可以获得 '父函数'里的变量呢,这就牵扯到闭包了,闭包这个课程里说的有,可以再仔细看看或者查阅一下资料

1 回复 有任何疑惑可以回复我~
#1

摇摆企鹅

打错字了 func 赋值为 打成复制为了 ····
2015-05-29 回复 有任何疑惑可以回复我~

右边:

    func=function(){

        return localVal;

}

这是一种常见的闭包写法

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有人能帮我吗

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信