此Js代码段中final_answer的值应该是什么?为什么?
function weird(x) {
var tmp = 3;
return function(y) {
return x + y + ++tmp;
}
}
var funny = weird(2);
var final_answer = funny(10);
我认为final_answer的价值很有趣(10)因为即使有趣的是2 + 4 + 2是8,但由于该值存储在变量中,我们不能像函数一样调用变量。
我不知道我是否正确。如果我错了,请说明理由为什么以便我能理解而不是重复这个错误。
答案 0 :(得分:0)
weird
返回一个函数,该函数引用传递给weird
的参数。它存储为funny
。调用funny
(带参数)调用从weird
返回的函数。
funny = weird(2);
funny(10)
>16
funny(5)
>12
funny(100)
>108
换句话说,funny
是匿名函数的产物,可以视为使用function
定义。
答案 1 :(得分:0)
调用var funny = weird(2)
时,在函数weird
内创建两个变量,x
,其值为2
,tmp
的值为{ {1}}。然后使用return语句创建一个函数对象。此函数中的代码可以访问变量3
和x
。然后返回此函数对象并将其分配给驻留在函数tmp
之外的变量funny
,将创建一个闭包。这意味着即使weird
之外的代码通常无法访问weird
内的变量,分配给weird
的函数对象也可以这样做。
当您致电funny
时,代码会计算funny(10)
的总和x
,2
的值y
和前10
- 4
的增量值tmp
。所以最终结果是16。