有人能帮我吗

来源:7-1 [JavaScript]理解闭包

文翰弟

2015-05-29 09:21

http://img.mukewang.com/5567be5b0001e11c07390397.jpg

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

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

写回答 关注

4回答

  • Bosn
    2015-06-05 10:36:15

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

  • Down_Up
    2016-04-27 21:51:43

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

  • 摇摆企鹅
    2015-05-29 09:42:13

    右边 这个函数 从下 往上看

    var func = outer();

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

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

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

    function(){
        return localVal;
    }

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

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

    摇摆企鹅

    打错字了 func 赋值为 打成复制为了 ····

    2015-05-29 09:43:14

    共 1 条回复 >

  • cwtxz
    2015-05-29 09:29:25

    右边:

        func=function(){

            return localVal;

    }

    这是一种常见的闭包写法

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281099 学习 · 1020 问题

查看课程

相似问题