功能评估如何在Javascript中工作?

时间:2015-05-14 04:38:20

标签: javascript

  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);

有人可以通过回答以下问题来澄清我的怀疑:

  1. 为什么函数被调用如下:noisy(Boolean)(0);
  2. 什么是“val”变量目的及其工作原理。
  3. 返回“val”值的函数。
  4. 请帮助我清除疑虑。

4 个答案:

答案 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的作用:

  1. 它接受一个函数作为参数,这里使用布尔值调用noisy,这是一个作为参数传递给嘈杂的函数。

  2. 它返回一个函数,该函数返回传递给函数的参数值,该函数本身是一个有噪声的参数。为简化起见,使用布尔值(0)调用noisynoisy将返回一个函数,该函数返回使用Boolean

  3. 调用的0的值

    我希望这会清除此代码段的作用。现在回答你的疑问:

    1. 为什么函数被调用如下:noisy(Boolean)(0)? 函数噪声以这样的方式定义:它需要将函数和参数传递给该函数。因此,Boolean是传递给noisy的函数,而0是传递给Boolean的参数

    2. 什么是“val”变量目的及其工作原理。 在这种情况下,val是布尔值(0)的值。

    3. val的值将返回noisy

    4. 返回的函数