请解释这个Javascript关闭练习
这个问题在这里已经有了答案:
为了理解这个,你必须知道函数调用和函数引用之间有什么区别。 以及范围如何在JavaScript中工作。
假设你知道这些事情,让我们来解释一下。
所以你首先有一个hidden
的变量,被赋予一个mystery(3)
的值mystery(3)
。 所以立即看看函数的mystery
,看看它返回的结果。 它返回一个内部函数mystery2
的引用 。 所以现在hidden
了一个引用 ,这意味着它没有实际的数值。 以下你有第二个变量声明var jumble = mystery3(hidden);
。 现在为了知道jumble
是什么,你需要看看函数mystery3
和它返回的值。 它再次返回一个内部函数mystery4
的引用。 所以,现在你所包含的两个变量包含对封闭mystery
和mystery
内部函数的mystery3
。
现在让我们看看var result = jumble(2)
。 执行jumble(2)
是一个实际的函数调用,该函数是jumble
引用的函数,它是mystery4
。 当mystery4
运行你看到它需要一个参数bonus
,这将是2
从线给出var result = jumble(2)
它返回param(6) + bonus
。 bonus
是2
,好的,但param(6)
什么? 这是给jumble
的价值: hidden
,这是对mystery2
的参考,请记住? 所以运行param(6)
将使用参数6
执行mystery2
所以,追溯这些函数可能会导致一些混淆,但是让我们按照实际值进行操作,以使其更清晰一些(如果这只是一个字)。
执行var result = jumble(2)
会给我们一个param(6) + 2
的返回值来得到param(6)
我们进入mystery2
multiplier = 6
,在那里我们设置multiplier = 6 * input
。 我们的输入等于3+2=5
,所以multiplier
变成6*5=30
并且作为返回值,我们乘以4
,这是我们的var secret
。 在mystery2
的执行结束时,我们的值为120
,这个值在mystery4
返回给我们的param(6)
。 如果你还记得,我们的bonus
是2
, 120+2=122
瞧!
我觉得我没有很好地解释这个问题,但这可能是我能做的最好的。 希望有所帮助!
链接地址: http://www.djcxy.com/p/1479.html