call()与apply()是用来改变函数体内的this指向,第一个参数是调用函数的母对象,他是调用上下文,函数体内通过this来获得对它的引用,换句话说就是第一参数===函数中的this。
但是如下示例:
function a () { alert (this); } a.call (null); a.call(undefined); a.call();
根据定义,上面应该弹出什么呢?是 null undefined undefined 么?
然而并非如此,
所以“第一个参数是调用函数的母对象”是有条件的,并不是万金油
1、在ES5的严格模式中,无论传入的是null还是undefined,严格按照定义来,即“第一个参数是调用函数的母对象”
a.call (null);//null a.call(undefined); //undefined a.call();//undefined
2、在非严格模式即ES3中,传入的是null、undefined或不传入参数时,都会用全局对象来代替。
a.call (null);//[Object window] a.call(undefined); //[Object window] a.call();//[Object window]
apply同上。