请问下5-14中arguments的问题

请问下5-14中arguments的问题

我看了一位助教老师对某位同学的回复,助教老师用arguments可以很方便地获得传递进来的参数。下面是我写了个基本一样的程序。我想请问下,arguments[0]为什么不是multiplay.apply(window,data)的第一个参数'window'呢,arguments为什么默认就是data呢

非常感谢!

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


正在回答

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

3回答

apply中的第一个参数只的是一个对象,也就是谁来调用前面这个函数,并不包括在arguments里面。

好帮手慕星星 2018-07-19 11:56:47

data是你自己定义的一个数组,data也是传入的一个参数,之前会在一个函数中写上形参,例如:

 function multiply(a) {}
 multiply(data)

但是现在有了arguments之后,就不需要使用形参了。直接使用arguments就可以了。可以在控制台中打印一下:

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

前面可以看成是你接收的data数组,arguments[0]等于data[0]。

  • 提问者 hpbrave #1
    谢谢助教的详细解答啊,因为我看apply(window,data)这个函数总共有两个参数,第一个是window,第二个是data,但是如果在控制台打印arguments[0],输出的不是window,而是data[0],这个arguments数组,似乎是没有把apply函数的第一个参数包括进去,而只有后面的第二个参数data。我是不是要把这个作为一个结论记住,就是apply函数的arguments只代表了data。
    2018-07-19 12:17:18
好帮手慕星星 2018-07-19 09:57:38

multiplay.apply(window,data),apply用法中,第一个参数是对象,也就是谁来调用这个multiplay函数,这个函数在全局中,本身就是window来调用的,所以第一个参数可以写成null,第一个参数就是multiplay函数本身要传入的数据参数。自己再理解下,祝学习愉快~~

  • 提问者 hpbrave #1
    是当apply里面第一个参数写成null的情况下,arguments[0]是从data开始的意思么?但是我写成window,arguments[0]也是data[0]啊,上面那段代码可以正确地输出乘法结果。
    2018-07-19 10:53:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

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

在线咨询

领取优惠

免费试听

领取大纲

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