call到底和直接调用有什么区别, 区别就在于call调用修改了this指针的指向, 如果被调用的函数里压根没用到this也就没有什么区别了
再举一个被调用函数有this指针的例子:
var x = "我是全局变量"; //定义全局变量x
function a(){ //定义函数类结构a
this.x = "我是在函数类结构a中声明的哦";
}
//定义普通函数,弹出当前指针所包含的变量x的值
function f(){
alert (this.x);
}
//返回值为“我是在函数类结构a中声明的哦”
f.call(new a());
//返回值为"我是全局变量"
f();
以apply()方式调用函数
apply() 方法与call()方法的功能节本相似 ,都可以用来动态地调用函数. apply()与call()的区别如下:
通过call()调用函数时必须在括号中详细地列出每个参数
apply()动态地调用函数时, 需要以数组的形式一次性传入所有调用参数
语法:apply([thisObj [,argArray] ]);
比如下面的两个语句是相等的:
myfun.call(window,12,13);
myfun.capply(window,[12,13]);
在修改this指针这点上,apply()与call()也保持一致,
大体上来说apply()与call()只在传参形式上有些差别而已.