这个JavaScript程序采取了哪些步骤
有人能解释一下这个程序所采取的步骤以及产生“假”结果的顺序吗这个JavaScript程序采取了哪些步骤,javascript,Javascript,有人能解释一下这个程序所采取的步骤以及产生“假”结果的顺序吗 当调用函数negate时,它会在传递给它的函数周围创建一个闭包。因此,当您调用isNotNaN时,它实际上正在运行isNaN,该函数已包含在函数中,然后使用布尔not运算符“!”对其求反 调用函数negate时,它会在传递给它的函数周围创建一个闭包。因此,当您调用isNotNaN时,它实际上正在运行isNaN,该函数已包含在函数中,然后使用布尔not运算符“!”对其求反 定义negate()函数 将变量isNotNaN设置为返回否定(
当调用函数negate时,它会在传递给它的函数周围创建一个闭包。因此,当您调用isNotNaN时,它实际上正在运行isNaN,该函数已包含在函数中,然后使用布尔not运算符“!”对其求反 调用函数negate时,它会在传递给它的函数周围创建一个闭包。因此,当您调用isNotNaN时,它实际上正在运行isNaN,该函数已包含在函数中,然后使用布尔not运算符“!”对其求反
negate()
函数isNotNaN
设置为返回否定(isNaN)
negate()
返回一个函数,同时保持作用域为func
(在本例中为isNaN
)isNotNan(NaN)
调用show()。与(!isNaN(NaN))
相同
negate()
函数isNotNaN
设置为返回否定(isNaN)
negate()
返回一个函数,同时保持作用域为func
(在本例中为isNaN
)isNotNan(NaN)
调用show()。与(!isNaN(NaN))
相同
isNaN
函数相反的函数
如果你能用直接调用isNaN
,那就太过分了代码>你自己
show( !isNaN(NaN) ); // gives the same result
最终的结果是,您有一个返回与isNaN
函数相反的函数
如果你能用直接调用isNaN
,那就太过分了代码>你自己
show( !isNaN(NaN) ); // gives the same result
该代码定义了一个函数“否定”,该函数将另一个函数作为参数。“negate”函数本身返回另一个函数,该函数返回的布尔值与调用传入参数的参数函数的结果相反
然后,代码定义了一个变量“isNotNan”,并将其设置为使用一个名为“isNaN”的函数(我们在这里没有看到)调用“negate”的结果。使用常量NaN
调用该函数实际上与调用相同!isNaN(NaN)
,它是false
,因为NaN
是NaN
,代码定义了一个函数“negate”,将另一个函数作为参数。“negate”函数本身返回另一个函数,该函数返回的布尔值与调用传入参数的参数函数的结果相反
function negate(func) {
return function(x) {
return !func(x);
};
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));
然后,代码定义了一个变量“isNotNan”,并将其设置为使用一个名为“isNaN”的函数(我们在这里没有看到)调用“negate”的结果。使用常量NaN
调用该函数实际上与调用相同!isNaN(NaN)
,它是false
,因为NaN
是NaN
function negate(func) {
return function(x) {
return !func(x);
};
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));
让我们从顶部开始:
function negate( func )
{
...
}
使用参数func
声明函数negate
。该函数返回一个匿名函数:
function(x)
{
return !func(x);
}
匿名函数将执行原始函数的func
参数中提供的函数,但会否定返回值
然后,isNotNaN被设置为一个函数,当参数不是NaN
时,它将返回true
,当参数是NaN
时,它将返回false
var isNotNaN = negate( isNaN );
最后,NaN
被放入函数中,返回false的预期结果
show( isNotNaN( NaN ) );
让我们从顶部开始:
function negate( func )
{
...
}
使用参数func
声明函数negate
。该函数返回一个匿名函数:
function(x)
{
return !func(x);
}
匿名函数将执行原始函数的func
参数中提供的函数,但会否定返回值
然后,isNotNaN被设置为一个函数,当参数不是NaN
时,它将返回true
,当参数是NaN
时,它将返回false
var isNotNaN = negate( isNaN );
最后,NaN
被放入函数中,返回false的预期结果
show( isNotNaN( NaN ) );
不,我实际上是一个老家伙,正试图自己学习Javascript……我希望这是家庭作业,因为那时我就有老师了!不,我实际上是一个老家伙,正试图自己学习Javascript……我希望这是家庭作业,因为那时我就有老师了@谢谢你的解释。在步骤4中,isNaN的返回值的逻辑对立面是什么?@mjmitche:不客气。isNaN
函数始终返回布尔值(true或false)。
logical NOT运算符为您提供与其后的布尔值相反的值。因此,如果isNaN
返回true
,则
将使其成为false
,反之亦然……当我说*“布尔值的对立面”时,显然true
和false
本身就是布尔值,所以它只是提供了相反的结果。但是javascript中的每种类型都有某种布尔值,所以有时
用于将其强制为相反的布尔值。例如,任何字符串(空字符串除外)都被视为true
(或通常称为“truthy”)。所以如果我的字符串是“patrick”,非空字符串是truthy,那么!“patrick”
给了我false
。我可以用另一个再次翻转它代码>,所以!!“patrick”
告诉我true
…因为isNaN
函数会告诉您传递的值是否是数字(或者可以成功转换为数字),然后执行!isNaN()
将给出与此相反的结果。在ot