这个JavaScript程序采取了哪些步骤

时间:2011-02-25 01:21:48

标签: javascript

有人可以解释一下这个程序采取的步骤以及采取这些步骤以产生结果“假”的顺序

function negate(func) {
  return function(x) {
    return !func(x);
  };
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));

5 个答案:

答案 0 :(得分:8)

  // 1. A function called "negate is declared
function negate(func) {  // 3. The "isNaN" function is received by negate().

  return function(x) {   // 4. A function is returned from the negate() call
    return !func(x);     //     that invokes the "isNaN" function, and returns
  };                     //     the logical opposite of its return value.

}

                  // 2. The built in "isNaN" function is passed to negate()
var isNotNaN = negate(isNaN);
 // 5. The function returned from negate() is assigned to the "isNotNaN" variable

         // 6. The "isNotNaN" function is invoked, and passed the "NaN" value.
show(isNotNaN(NaN));
 // 7. The result returned from "isNotNaN" is passed to the show() function.

最终结果是你有一个返回与isNaN函数相反的函数。

如果您可以自己使用isNaN致电!,那就好像太过分了。

show( !isNaN(NaN) );  // gives the same result

答案 1 :(得分:2)

  1. 定义negate()功能。
  2. 将变量isNotNaN设置为返回negate(isNaN)
  3. negate()返回一个函数,同时将范围保持为func(在本例中为isNaN)。
  4. 使用show()致电isNotNan(NaN)(不将数字传递给isNaN否定)。与( ! isNaN(NaN))相同。

答案 2 :(得分:2)

代码定义了一个函数“negate”,它作为参数另一个函数。 “negate”函数本身返回另一个函数,该函数返回与传入的参数调用参数函数的结果相反的布尔值。

然后代码定义了一个变量“isNotNan”,并将其设置为等于使用一个名为“isNaN”的函数(我们在这里看不到)调用“negate”的结果。使用常量NaN调用 函数实际上与调用!isNaN(NaN)相同,false因为NaNNaN

答案 3 :(得分:1)

当你调用函数否定时,它会在你传递给它的函数周围创建一个闭包。所以当你调用isNotNaN时,它实际上运行的是isNaN,它已被包含在函数中,然后用布尔运算符“!”来否定它。

答案 4 :(得分:1)

function negate(func) {
  return function(x) {
    return !func(x);
  };
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));

让我们从顶部开始:

function negate( func )
{
  ...
}

使用参数negate声明函数func。该函数返回一个匿名函数:

function(x)
{
  return !func(x);
}

匿名函数将执行原始函数func参数中提供的函数,但否定返回值。

然后将isNotNaN设置为当参数 true时将返回NaN的函数,以及当参数为<时返回false的函数/ em> NaN;

var isNotNaN = negate( isNaN );

最后将NaN放入函数中,返回预期结果false

show( isNotNaN( NaN ) );