function noisy(f) {
return function(arg) {
console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;
};
}
noisy(Boolean)(0);
有人可以通过回答以下问题来澄清我的怀疑:
请帮助我清除疑虑。
答案 0 :(得分:0)
<强> 1。为什么函数被调用如下:noisy(Boolean)(0);
由于函数noisy
返回一个单独的函数,你可以用两组parantheisis来调用它。第一个&#39; Boolean
&#39;直接传递给嘈杂。执行嘈杂后返回匿名函数,&#39; 0&#39; 0传递给该函数。
<强> 2。什么是&#34; val&#34;可变目的及其工作原理。
要使val
按预期工作,第一个参数也应该是一个函数。在这种情况下,&#39;布尔&#39;因为它是可以构造的javascript对象的名称。
第3。哪个函数的值是&#34; val&#34;退回。
它不会返回任何功能。相反,结果可以存储在像
这样的变量中 var result = noisy(Boolean)(0);
答案 1 :(得分:0)
代码noisy(Boolean)
正在调用noisy
作为Boolean
传递的函数f
。那个函数然后返回另一个没有名字的函数(这被称为"anonymous function")。
然后行noisy(Boolean)(0)
调用该匿名函数,传入值0
,该值在该函数内已知为arg
。该函数执行行var val = f(arg);
,如果您按照传入的参数执行,则基本上执行var val = Boolean(0)
。
您可以通过执行以下操作来简化此操作:
var firstResult = noisy(Boolean);
var result = firstResult(0);
其中result
是匿名函数返回的val
。在此示例中,它与调用Boolean(0)
false
相同,因此result
将为false
。
您也可以尝试:
var firstResult = noisy(String);
var result = firstResult(21);
其中result
(同样,匿名函数返回的val
)将为"21"
。在此示例中,它与调用String(21)
"21"
(字符串,而不是数字)相同。
答案 2 :(得分:0)
部分考虑:
noisy(Boolean)
调用 noisy 并向其传递内置的Boolean对象,该对象是所有Boolean对象的构造函数。
嘈杂功能:
function noisy(f) {
return function(arg) {
console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;
};
}
返回一个具有 f 闭包的函数,该函数是对 Boolean 的引用。函数具有对其外部执行上下文的所有变量的闭包。
调用此函数时:
...(0);
传递值 0 :
... function(arg) {
分配给 arg :
console.log("calling with", arg);
记录&#34;用0&#34;
呼叫 var val = f(arg);
将Boolean(0)
的结果分配给 val 。当 Boolean 作为函数调用时,它执行类型转换。 0 转换为 false ,因此这是分配给 val 的值。
console.log("called with", arg, "- got", val);
日志&#34;用0调用 - 得到假&#34;
return val;
返回 val 的值(即false
),但没有做任何事情,因此它消失在以太中。
答案 3 :(得分:0)
以下是函数noisy
的作用:
它接受一个函数作为参数,这里使用布尔值调用noisy,这是一个作为参数传递给嘈杂的函数。
它返回一个函数,该函数返回传递给函数的参数值,该函数本身是一个有噪声的参数。为简化起见,使用布尔值(0)调用noisy
。 noisy
将返回一个函数,该函数返回使用Boolean
0
的值
醇>
我希望这会清除此代码段的作用。现在回答你的疑问:
为什么函数被调用如下:noisy(Boolean)(0)?
函数噪声以这样的方式定义:它需要将函数和参数传递给该函数。因此,Boolean
是传递给noisy
的函数,而0
是传递给Boolean
的参数
什么是“val”变量目的及其工作原理。
在这种情况下,val
是布尔值(0)的值。
val
的值将返回noisy