老师帮我检查下代码?

老师帮我检查下代码?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>函数的间接调用</title>
</head>
<body>
    <script>
   // 在此处补充代码
   var data = [1, 2, 3, 4];
   function multiply(num1, num2, num3, num4) {
     return num1 * num2 * num3 * num4;
   }
   var result = multiply.apply(window, data);
   document.write(result);
    </script>
</body>
</html>

还有arguments是哪里学的 什么意思?

正在回答

登陆购买课程后可参与讨论,去登陆

6回答

同学你好, 因为不传递参数的时候, arguments.length为0, 不会执行for循环, 所以在for循环里面的判断是不会别执行的, 直接返回默认的sum值1

http://img1.sycdn.imooc.com//climg/5d67f2870001150b16480808.jpg

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~

好帮手慕慕子 2019-08-29 18:47:57

同学你好, if (arguments.length == 0 || isNaN(arguments[i])) return;执行完这句,跳出函数 return 之后的代码就不会在执行了。

老师这边测试同学所说的, 在此处return sum,返回的也是undefined

http://img1.sycdn.imooc.com//climg/5d67ad230001444c08860448.jpg

http://img1.sycdn.imooc.com//climg/5d67ad4d00010dbc01580054.jpg

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 原来是晓琪_ #1
    那为什么页面上还是输出1了呀
    2019-08-29 19:30:08
  • 好帮手慕慕子 回复 提问者 原来是晓琪_ #2
    同学你好, 老师这边测试输出的是undefined, 建议:同学可以清除浏览器缓存,确认一下打开的文件代码是否是修改后的哦,如果还有疑惑,可以再次提问, 我们会继续为你解答,祝学习愉快~~~~
    2019-08-29 19:37:11
  • 提问者 原来是晓琪_ 回复 好帮手慕慕子 #3
    老师修改后的 我明白 我的意思是我不在最开始进行if判断 而是在for中 用或一起判断 为什么输出1 这句话我不明白。 因为设置了result默认值是1, 所以arguments值为空的时候,返回的是1。
    2019-08-29 21:51:28
提问者 原来是晓琪_ 2019-08-29 17:30:40

data = [];  

 if (arguments.length == 0 || isNaN(arguments[i])) return;

运行完这句不是应该 直接就跳出函数了吗 不会接着往下执行, 跳出函数后  return什么后面 什么也没接, 应该为undefined,  为什么 return sum   , 此时sum = 1 ; 还是执行了  , 就说明他判断 完直接return 没跳出函数吗?

好帮手慕慕子 2019-08-29 17:21:21

同学你好, 因为设置了result默认值是1, 所以arguments值为空的时候,返回的是1。

建议: 可以添加一个判断,如果arguments没有值, 直接返回undefined即可

http://img1.sycdn.imooc.com//climg/5d6798fa0001da3608660357.jpg

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

提问者 原来是晓琪_ 2019-08-29 17:07:56

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>函数的间接调用</title>
</head>
<body>
    <script>
   // 在此处补充代码
   var data = [];
   function multiply() {
     // if(arguments.length == 0) return;
     var sum = 1;
     for(var i = 0; i < arguments.length; i++){
      if (arguments.length == 0 || isNaN(arguments[i])) return;
      sum *= arguments[i];
     }
     return sum;
   }
   var result = multiply.apply(window, data);
   document.write(result);
    </script>
</body>
</html>

老师代码中data = []  但为什么会输出1  正常应该是undefined呀?

http://img1.sycdn.imooc.com//climg/5d6795c80001d4f713660768.jpg 

好帮手慕慕子 2019-08-29 16:17:13

同学你好, 效果实现了,但是习题中要求参数不能一个一个的传入,避免参数多的时候麻烦,可以使用arguments,用循环累乘,参考:

http://img1.sycdn.imooc.com//climg/5d67898700012d0e07120444.jpg

在js基础阶段讲解函数章节中有详细的讲解哦。

http://img1.sycdn.imooc.com//climg/5d6789f50001e1ce06910776.jpg

课程地址链接:

https://class.imooc.com/lesson/770#mid=19291

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师