函数有三种定义方式
- 函数声明
function add1(){
console.log("函数声明");
}
- 函数表达式
var add2()=function(){
console.log("函数表达式");
}
- 函数实例化
var add3 = new Function("i",
"console.log("函数实例化")
);
区别:
- 函数声明定义特点:
函数定义会被前置;
重复定义函数时,最后一次定义有效。- 函数实例化定义特点:
不遵循作用域逐级向上回溯原则;
定义的函数只能访问本地作用域和全局作用域。
函数调用
- 函数调用模式
- this指向全局对象
- 方法调用模式
- this指向调用者
- 构造函数调用模式 new Function(...);
- this指向被构造的对象
- apple(call)调用模式
- this指向第一个参数
函数参数传递
原始类型参数的传递模式:按值传递
对象类型参数的传递模式:按共享传递
闭包
什么是闭包:函数内部定义的字函数引用到父函数的变量形成的变量。
功能:
1.保存函数执行状态
2.封装
3.性能优化
Function.prototype.bind