-
函數(shù)的定義方式
-
函數(shù)聲明:必須有名字魏烫,會(huì)函數(shù)提升玩祟,在預(yù)解析階段就已經(jīng)創(chuàng)建圣贸,聲明前后都可以調(diào)用
//函數(shù)聲明 //定義函數(shù)名 function fn(){ console.log(123); }
-
函數(shù)表達(dá)式:一種變量賦值岖赋,函表達(dá)式可以沒(méi)有名字(匿名函數(shù)),沒(méi)有函數(shù)提升映挂。
//將函數(shù)賦值給一個(gè)變量穗泵,可以是匿名函數(shù) var fn = function(){ console.log(123); };
由于函數(shù)聲明提升普气,函數(shù)聲明定義的函數(shù),其函數(shù)名可以在函數(shù)聲明之前調(diào)用火欧,而函數(shù)表達(dá)式定義的函數(shù)不能棋电,它進(jìn)行的是一個(gè)變量賦值,本質(zhì)會(huì)進(jìn)行變量聲明提升苇侵,如果寫在前面的話赶盔,只是定義了一個(gè)變量,而沒(méi)有賦值榆浓,其內(nèi)部是undefined于未,無(wú)法執(zhí)行函數(shù),就會(huì)報(bào)錯(cuò)。
-
new Function
函數(shù)本身也是一種對(duì)象烘浦,可以調(diào)用屬性和方法
//函數(shù)聲明方式 //有參數(shù) function fun(a,b){ var a = 1; console.log(a+b); } function(2,3); //通過(guò)構(gòu)造函數(shù)方法定義函數(shù) var fn = new Function('var a = "1";console.log(a)'); fn(); //添加參數(shù) var fn2 = new Function('a','b','var a = "1";console.log(a+b)'); fn2(2,4);
這種方式其實(shí)相當(dāng)于new Function的括號(hào)里穿的是一堆字符串抖坪,解析慢,效率低闷叉,易出錯(cuò)擦俐。
console.dir(fn2);//new Function()是函數(shù)也是一種對(duì)象,有自己的屬性和方法
new Function()是函數(shù)也是一種對(duì)象握侧,有自己的屬性和方法
-
-
函數(shù)的調(diào)用和 this
①普通的函數(shù)調(diào)用是通過(guò)給函數(shù)名或者變量名添加()的方式執(zhí)行蚯瞧。
function fn(){ console.log(1); }; fn();
②構(gòu)造函數(shù),通過(guò)new關(guān)鍵字進(jìn)行調(diào)用(也可以使用()調(diào)用品擎,只是功能不全)
```JavaScript
function Student(name){
this.name = name;
};
var s1 = new Student("li");
```
③對(duì)象中的方法埋合,通過(guò)對(duì)象打點(diǎn)調(diào)用函數(shù),然后加括號(hào)();
內(nèi)部的 this 默認(rèn)指向的是調(diào)用的對(duì)象自己
```JavaScript
var Student = {
name:"lu",
message: function(){
console.log(this.name + " is a student");
}
}
Student.message();
```
④事件函數(shù)萄传,不需要加特殊符號(hào)甚颂,只要事件被觸發(fā),會(huì)自動(dòng)執(zhí)行函數(shù);
內(nèi)部的 this 默認(rèn)指向的是事件源
```JavaScript
document.onclick = function(){
console.log("hello");
}
```
⑤定時(shí)器秀菱、延時(shí)器中的函數(shù)振诬,不需要加特殊符號(hào),只要執(zhí)行后答朋,在規(guī)定的時(shí)間自動(dòng)執(zhí)行贷揽;
內(nèi)部的 this 默認(rèn)指向是window
```JavaScript
setInterval(function(){
console.log(1);
},1000);
```
????this的指向是需要聯(lián)系執(zhí)行上下文,在調(diào)用的時(shí)候梦碗,是按照什么方式調(diào)用,指向是不一樣的
調(diào)用方式 | 非嚴(yán)格模式 | 備注 |
---|---|---|
普通函數(shù)調(diào)用 | window | 嚴(yán)格模式下是 undefined |
構(gòu)造函數(shù)調(diào)用 | 實(shí)例對(duì)象 | 原型方法中 this 也是實(shí)例對(duì)象 |
對(duì)象方法調(diào)用 | 該方法所屬對(duì)象 | 緊挨著的對(duì)象 |
定時(shí)器函數(shù) | window | |
事件綁定方法 | 綁定事件對(duì)象 |