什麼是函數?
具有特定功能的n條語句的封裝體
只有函數是可執行的, 其它類型的數據是不可執行的
函數也是對象
爲什麼要用函數?
提高代碼複用
便於閱讀和交流
如何定義函數?
函數聲明
表達式
如何調用(執行)函數?
test()
new test()
obj.test()
test.call/apply(obj)
回調函數
什麼函數纔是回調函數?
你定義的
你沒有直接調用
但最終它執行了(在特定條件或時刻)
常見的回調函數?
DOM事件函數
定時器函數
ajax回調函數
生命週期回調函數
IIFE
理解
全稱: Immediately-Invoked Function Expression
立即調用函數表達式別名: 匿名函數自調用
作用
* 隱藏內部實現
* 不污染外部命名空間
函數中的this
1. 以函數的形式調用時,this永遠都是window
2. 以方法的形式調用時,this就是調用方法的那個對象
3. 當以構造函數的形式調用時,this就是新創建的那個對象
4. 使用call和apply調用時,this是指定的那個對象
理解1
function Person(color) {
// console.log(this)
this.color = color;
this.getColor = function () {
// console.log(this)
return this.color;
};
this.setColor = function (color) {
// console.log(this)
this.color = color;
};
}
// 以函數的形式調用時,this永遠都是window
Person("red"); //this是誰? window
var p = new Person("yello"); //this是誰?
// 當以構造函數的形式調用時,this就是新創建的那個對象
p.getColor(); //this是誰? p
var obj = {};
// 使用call和apply調用時,this是指定的那個對象
p.setColor.call(obj, "black"); //this是誰? obj
// 以方法的形式調用時,this就是調用方法的那個對象
var test = p.setColor;
test(); //this是誰? window
理解2
function fun1() {
function fun2() {
console.log(this);
}
fun2(); //this是誰? window
}
fun1();