代码段的输出

时间:2015-08-07 21:43:12

标签: javascript puzzle

此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,但由于该值存储在变量中,我们不能像函数一样调用变量。

我不知道我是否正确。如果我错了,请说明理由为什么以便我能理解而不是重复这个错误。

2 个答案:

答案 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,其值为2tmp的值为{ {1}}。然后使用return语句创建一个函数对象。此函数中的代码可以访问变量3x。然后返回此函数对象并将其分配给驻留在函数tmp之外的变量funny,将创建一个闭包。这意味着即使weird之外的代码通常无法访问weird内的变量,分配给weird的函数对象也可以这样做。

当您致电funny时,代码会计算funny(10)的总和x2的值y和前10 - 4的增量值tmp。所以最终结果是16。