函數有三種定義方式
- 函數聲明
function add1(){
console.log("函數聲明");
}
- 函數表達式
var add2()=function(){
console.log("函數表達式");
}
- 函數實例化
var add3 = new Function("i",
"console.log("函數實例化")
);
區別:
- 函數聲明定義特點:
函數定義會被前置;
重復定義函數時,最后一次定義有效。- 函數實例化定義特點:
不遵循作用域逐級向上回溯原則;
定義的函數只能訪問本地作用域和全局作用域。
函數調用
- 函數調用模式
- this指向全局對象
- 方法調用模式
- this指向調用者
- 構造函數調用模式 new Function(...);
- this指向被構造的對象
- apple(call)調用模式
- this指向第一個參數
函數參數傳遞
屏幕快照 2016-08-15 下午2.49.33.png
原始類型參數的傳遞模式:按值傳遞
屏幕快照 2016-08-15 下午2.49.23.png
對象類型參數的傳遞模式:按共享傳遞
屏幕快照 2016-08-15 下午2.47.09.png
閉包
什么是閉包:函數內部定義的字函數引用到父函數的變量形成的變量。
功能:
1.保存函數執行狀態
2.封裝
3.性能優化
Function.prototype.bind