1. 每个函数都包含以下属性:
- 一个 prototype 属性,本质是一个对象,用于定义类实例的共享方法
- 一个 this 关键字,函数作为方法时,引用调用方法的对象。Tip: function 单独调用的时候,称作函数; 被对象调用的时候,称作方法
- 一个 arguments 类数组对象,并不是真正的数组,包含传给函数的所有实参arguments.length 表示实参个数 arguments.callee 表示正在执行的当前函数 arguments.caller 表示调用当前函数的上一级函数 FunctionName.length 表示形参个数
2. 使用 new F(...) 或者构造函数调用创建的对象,都隐式包含一个指针,指向构造函数的 prototype 属性。
构造函数通常不需要使用 return 语句返回值,执行完毕后,会返回新创建的对象。
如果构造函数中使用 return 语句返回了一个对象,那么表达式就使用这个对象。
如果构造函数使用return 语句但没有返回值或者返回了一个原始值(primitive value),那么返回的这个值
会被忽略,还是返回新创建的对象。3. 函数可以做为值使用,进行赋值,例如:
function A(name) { ... }
var b = A;
b("bailiangxigua");
4. 函数不是原始值,是一种特殊的对象,那么就可以给函数添加属性,函数的属性一般被用作静态变量。
uniqueInteger.counter = 0;
// 每次调用这个函数都会返回一个不同的整数 function uniqueInteger() { return uniqueInteger.counter++; }5. 为了不给全局作用域造成污染,很多时候都使用匿名函数包裹使用的变量,此时的函数相当于命名空间。
(function() {
var a = 23; var b = "laeon";});