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>