call与apply方法的使用

apply与call两种方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内的this对象的值

apply()方法接收两个参数:①是在其中运行函数的作用域 ②参数数组(可以是Array的实例,也可以是arguments对象)

例如:

<!DOCTYPE html>
<html>
<head>
    <title>Add Example 1</title>
</head>
<body>
    <script type="text/javascript">
      var a,b;
      function sum(num1,num2){
          return num1+num2;
      }
      function callSum1(num1,num2){
          console.log("callSum1");
          a=this;
          console.log(a);   //Window
          return sum.apply(this,arguments);
      }
      
      function callSum2(num1,num2){
          console.log("callSum2");
          b=this;
          console.log(b);   //Window
          return sum.apply(this,[num1,num2]);
      }

       alert(callSum1(10,10));  //20
       alert(callSum2(10,10));  //20
       alert(a===b);            //true   a与b都是指向同一全局对象(因为callSum1与callSum2都是在全局作用域调用)
    </script>
</body>
</html>

call()方法与apply方法的作用相同,它们的区别仅在于接收参数的方式不同。对于call方法而言第一个参数是this值没有变化,变化的是其余参数都直接传递给函数(也就是说,传递给函数的参数必须逐个列举出来);

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        function sum(num1,num2){
            return num1+num2;
        }
        function callSum(num1,num2){
            return sum.call(this,num1,num2);
        }
        alert(callSum(10,10));

    </script>
</body>
</html>
原文地址:https://www.cnblogs.com/jcbo/p/6744504.html