这个功能如何正常工作?

时间:2017-09-04 20:16:54

标签: javascript

尝试理解我遇到此site's exercise的范围练习。在function doMultiplication内如何调用function writeIt?每当我试图弄清楚这个看似简单的练习时,我都会睁大眼睛。你可以分解一下来解释一下这个怎么样吗?提前致谢。



function writeIt(numTimes, multiple) {
  function doMultiplication(val, multiple) {
    i = val * multiple;
    return i;
  }

  for (let i = 0; i < numTimes; i++) {
    document.write(doMultiplication(i, multiple) + ' ');
  }
}

writeIt(5, 2);
&#13;
&#13;
&#13;

编辑 - 这是我对正在发生的事情的理解所以可以澄清我在这里不理解的事情......

因此,使用writeIt(5,2)函数,意味着2乘以val?但这里的val是什么?

我得到了等式,以及numTimes是多少......我想我被val部分抛弃了?

3 个答案:

答案 0 :(得分:1)

writeIt()有两个参数 - 5对应于函数运行的次数,2对应于倍数。基本上,您将列出2五倍的倍数。

function doMultiplication(val, multiple)nested function - 它与multiple的{​​{1}}参数以及writeIt()循环中的i一样。本质上,此函数将目标数乘以即将到来的for循环传入的索引。

接下来是forfor (let i = 0; i < numTimes; i++)是ES6等价于let(但是包含块级范围);它只是设置一个新变量。此变量vari开始,并循环,直到它等于函数应运行的次数(0)。对于此循环的每个迭代,它运行5函数,将索引作为值乘以。输出将使用doMultiplication()写入页面。

最后,document.write()只需调用 writeIt(5, 2);函数,并传入两个参数。因为它不在函数本身内,所以一旦页面加载就会执行它。

输出为writeIt(),因为0 2 4 6 8循环的ifor开始,所以这就是你开始相乘的地方。

希望这有帮助! :)

答案 1 :(得分:1)

在以下事情发生时调用writeIt(5,2); -

writeIt(5,2)此处numTimes = 5&amp; multiple = 2。

现在根据函数声明,它移动到for循环 -

for (let i = 0; i < numTimes; i++) {
    document.write(doMultiplication(i, multiple) + ' ');
}

TO -

for (let i = 0; i < 5; i++) {
    //document.write(doMultiplication(0, 2) + ' ');
    //document.write(doMultiplication(1, 2) + ' ');
    //document.write(doMultiplication(2, 2) + ' ');
    //document.write(doMultiplication(3, 2) + ' ');
    //document.write(doMultiplication(4, 2) + ' ');
}

现在我们转到 -

function doMultiplication(val, multiple) {
    i = val * multiple;
    return i;
}

从for循环中调用 -

    //document.write(doMultiplication(0, 2) + ' ');

所以doMultiplication(0,2)=&gt; 0 * 2 =&gt;返回0; =&GT; 0 +&#39; &#39 ;;

    //document.write(doMultiplication(1, 2) + ' ');

所以doMultiplication(1,2)=&gt; 1 * 2 =&gt;返回2; =&GT; 2 +&#39; &#39 ;;

    //document.write(doMultiplication(2, 2) + ' ');

所以doMultiplication(2,2)=&gt; 2 * 2 =&gt;返回4; =&GT; 4 +&#39; &#39 ;;

    //document.write(doMultiplication(3, 2) + ' ');

所以doMultiplication(3,2)=&gt; 3 * 2 =&gt;返回6; =&GT; 6 +&#39; &#39 ;;

    //document.write(doMultiplication(4, 2) + ' ');

所以doMultiplication(4,2)=&gt; 4 * 2 =&gt;返回8; =&GT; 8 +&#39; &#39 ;;

答案 2 :(得分:1)

我仍然不确定你的问题。但我会尽力回答。 Val是从循环传递的东西,即i。所以(val = i)。 通过打印控制台语句而不是仅仅在浏览器上编写它可以更好地查看。可能会在片段下方帮助

function writeIt(numTimes, multiple) {
  function doMultiplication(val, multiple) {
    console.log('val is ', val);
    const i = val * multiple;
    console.info ('i after manipulation ', i);
    return i;
  }

  for (let i = 0; i < numTimes; i++) {
    console.log('i is ', i);
    console.log(doMultiplication(i, multiple) + ' ');
   }
}

writeIt(5, 2);

还有一件事,你应该做的是让我成为一个块范围变量,而不仅仅是让它成为一个全局变量。

希望这有帮助。

快乐学习

Vatsal