他是一个类数组的对象,有length属性,不是数组,它的内容是函数运行时的实参列表
即srguments可以获取函数运行时收到的实参个数(在多态里可以用到)它收集的是‘所有’的实参,即使没有与之相对应的形参
而形参与对应的arguments单元,其实是相互映射的,互相影响
arguments.callee属性代表当前运行的函数
问题:匿名函数,不用callee 完成递归
函数运行期内,关键的三个对象:
AO z本函数AO上没有某属性,则继续去外层函数的AO上找,直到全局对象,叫做作用域链;
arguments 每个函数都有自己的callee, 但不向外层找arguments的相关属性,即不形成链;
this 对象
js中函数的4中调用方式
1.普通函数来调用,this的值null,但被解释成window
在ECMAScript5标准中,如果this为null,则解释为undefined;
2,作为对象的方法来调用,this指向方法的调用者,即该对象
作为方法调用时,this指向其调用那一刻的调用者,母体对象,不管被调用函数,声明时属于方法还是函数
3,函数作为构造函数调用时,js 中没有类的概念,创建对象是用构造函数来完成,或者直接字面量的方式 json 格式来完成创建对象(不能直接调用,是因为此时此刻this 指向window,将会污染全局变量)
4 new Dog 发生了一下几个步骤
a:系统创建空对象{},(空对象constructor属性指向Dog函数)
b:把函数的this 指向该空对象
c:执行该函数;
d:返回该对象
函数作为构造函数来执行时,return的值是忽略的,返回的仍旧是一个对象
【函数】被call, apply 调用时
语法格式:函数fn.call(对象obj,参数1,参数2,......参数n);
运行如下:fn函数中的this ---指向---》对象obj
运行fn(参数1,参数2.,.... 参数n)
函数的this 默认指向null 会被js 解释器解释为window