一、定义函数的三种方式
- 函数声明方式 function a(){}
- 定义函数表达式方式 var a = function(){};
- 构造函数方式 var a = new Function(...arg,function){} 不推荐,但是指明了函数是对象,
二、函数是对象,那么函数名就是指针,跟包含对象指针的其他变量没有什么不同。
三、函数声明跟定义函数表达式区别
- 函数声明在解析过程中会被函数声明提前,无论何时调用都可以
- 定义函数表达式,则必须是执行到当前语句时,才会被执行。此时才可以被调用
四、arguments.callee
- callee属性是一个指针,指向拥有这个arguments对象的函数。
五、函数的属性跟方法
- 每个函数都包含的两个属性:prototype和length
- length:指的是参数个数
- prototype:保存函数所有的实例方法,例如toString()和valueOf()等方法实际上都保存在prototype名下,只不过通过各自对象实例调用而已。 是不可枚举的,所以不能被for in发现
- call和apply方法:每个函数都包含这两个非继承而来的方法。 他们都是在指定作用域中调用函数
- toLocalString()和toString()方法和valueOf()都是函数继承来的。 六、基本包装类型
- 基本包装类型的存在期只在执行的这一行,这行过去后,就会立马被销毁。因此基本包装类型没有属性跟方法
- var s = new String("nihao"); typeof(s); //"object" 对 基本 包装 类型 的 实例 调用 typeof 会 返回" object",