js函数
函数的声明有3种,函数声明语句,函数表达式,Function构造函数
-
函数声明语句
function fn(a,b,c){...} -
函数表达式
var hello = function hel(x, y, z) { return x + y + x; } //hel只能在函数内部使用
Function构造函数 var fn = new Function("x", "y", "return x+y;")

把函数当做构造方法使用的时候,如果函数返回一个对象,那么new出来就是这个对象,如果返回的不是对象或者不返回,则new出来的是这个函数对象本身。
函数的调用有4种方式
- 函数调用模式 2. 方法调用模式 3.构造调用模式 4. 间接调用模式

函数调用模式里,非严格模式下,this指向window, 严格模式下,this是undefined

fn里的this指向当前的obj对象

构造函数调用中,this指向当前新构造的函数对象。


函数传参:
非严格模式下,函数可以有同名形参,但是这个形参取值是当前赋值的最后一个实参
参数个数:实参比形参少,后面的都是undefined. 实参比形参多,可以在函数内部用arguments(类数组)接收所有的实参

函数重载:
js中不存在重载,同名函数,后面的会覆盖前面的。
函数属性:
arguments.length: 实参个数。函数名.length: 形参个数

每一个函数都有一个prototype属性

非严格模式下,call/apply方法,传入null/undefined, this会被转换成window对象






上图的这种技术叫做函数柯里化。
