函數(shù)有三種定義方式
- 函數(shù)聲明
function add1(){
console.log("函數(shù)聲明");
}
- 函數(shù)表達式
var add2()=function(){
console.log("函數(shù)表達式");
}
- 函數(shù)實例化
var add3 = new Function("i",
"console.log("函數(shù)實例化")
);
區(qū)別:
- 函數(shù)聲明定義特點:
函數(shù)定義會被前置;
重復(fù)定義函數(shù)時,最后一次定義有效。- 函數(shù)實例化定義特點:
不遵循作用域逐級向上回溯原則;
定義的函數(shù)只能訪問本地作用域和全局作用域。
函數(shù)調(diào)用
- 函數(shù)調(diào)用模式
- this指向全局對象
- 方法調(diào)用模式
- this指向調(diào)用者
- 構(gòu)造函數(shù)調(diào)用模式 new Function(...);
- this指向被構(gòu)造的對象
- apple(call)調(diào)用模式
- this指向第一個參數(shù)
函數(shù)參數(shù)傳遞

屏幕快照 2016-08-15 下午2.49.33.png
原始類型參數(shù)的傳遞模式:按值傳遞

屏幕快照 2016-08-15 下午2.49.23.png
對象類型參數(shù)的傳遞模式:按共享傳遞

屏幕快照 2016-08-15 下午2.47.09.png
閉包
什么是閉包:函數(shù)內(nèi)部定義的字函數(shù)引用到父函數(shù)的變量形成的變量。
功能:
1.保存函數(shù)執(zhí)行狀態(tài)
2.封裝
3.性能優(yōu)化
Function.prototype.bind