JavaScript函数的错误结果(数学运算)

时间:2016-04-27 01:21:19

标签: javascript

有人可以帮我分解一下这个剧本并告诉我结果是30105吗?非常感谢你们

function one(numOneIn) {

two(numOneIn * 3); //1x3

document.write (numOneIn); //3

}

function two(aNumberIn) { 

document.write (aNumberIn); //1

}

function three(numIn) {

one(numIn * 2); 

document.write (numIn);

}

three(5);

3 个答案:

答案 0 :(得分:2)

  

3(5)

调用,传递数字5,然后:

  

一个(numIn * 2);

调用一个,传递5 x 2 => 10,然后:

  

两个(numOneIn * 3)

调用两个,传递10 x 3 => 30,然后

两个将“30”作为字符串写入文档。

控制返回一个,它将传递给它的值(10)写为字符串。

控制返回,它将传递给它的值(5)写为字符串。

所以最后的字符串是“30105”。

答案 1 :(得分:0)

这是您发布的代码的合理格式版本

1.  function one(numOneIn) {
2.      two(numOneIn * 3);
3.      document.write(numOneIn);
4.  }
5.  function two(aNumberIn) {
6.      document.write(aNumberIn);
7.  }
8.  function three(numIn) {
9.      one(numIn * 2);
10.     document.write(numIn);
11. }
12. three(5);

让我们来看看它是如何执行的。

前几组(1-4,5-7,8-10)是function定义。它们在被调用之前不会执行。

执行的第一行是three(5)(第12行)。

它会调用three行上的8函数,将值5传递给numIn参数。

执行的下一行是one(numIn * 2)(第9行)。

它会调用one行上的1函数,将值10(5 * 2)传递给numOneIn参数。

执行的下一行是two(numOneIn * 3)(第2行)。

它会调用行two上的5函数,将值30(10 * 3)传递给aNumberIn参数。

执行的下一行是document.write(aNumberIn)(第6行),它将'30'添加到DOM,因为aNumberIn被强制转换为字符串。

第7行结束对two的调用。

执行的下一行是document.write(numOneIn)(第3行),它将'10'添加到DOM,因为numOneIn被强制转换为字符串。

第4行结束对one的调用。

执行的下一行是document.write(numIn)(第10行),它将'5'添加到DOM,因为numIn被强制转换为字符串。

第11行结束对three的调用。

脚本已完成执行。

DOM的最终状态是'30105'

的字符串

答案 2 :(得分:0)

two()写了30

one()写了10个

three()写了5

没有任何格式化程序的

document.write()将在光标最后一个位置的正确页面上绘制/写入。

如果您向document.write()添加一些格式,您就会理解我的意思。

尝试将<br/>添加到document.write()前缀或后缀

EG:而不是document.write (numOneIn);将其重写为document.write ("<br/>"+numOneIn);