1.函数实际上是一个对象typeof functionName→function,通过instanceof判断属于哪个类。
2.函数名实际是一个指针,指向某个函数体。
3.函数内部有两个对象:arguments和this。arguments不光可以指向函数传进去的参数,并且,arguments.callee指向函数,比如函数outer,调用的时候可以写为outer(),此时就可以更改为arguments.callee();
this指的是一个执行环境,比如我们单独调用函数outer,那么此时this就是window,如果我们采用call,或者apply就可以控制函数的调用对象,即this对象,
function outer(){}
var obj = new Object();
outer.call(obj);这时this就指向的是obj。
我们可以看到两个方法apply和call,都是方法的调用,方法可以通过方法名称调用,为什么还需要call和apply。因为他们可以控制this对象。其中如果outer.call(null)或者
outer.call(undefined),那么此时则指向的是window对象。call和apply的区别在于第二个参数,apply的第二个参数只能是arguments和一个数组,而call则是一一列举的,比如
outer.call(obj,"red","blue");而apply则是outer.apply(obj,["red","blue"]);
深入理解JavaScript函数与this对象
本文详细解析JavaScript中函数的实现方式,包括函数作为对象、函数名作为指针、函数内部的arguments和this对象使用,以及call和apply方法如何控制this对象。
1238

被折叠的 条评论
为什么被折叠?



