一、函數(shù)
函數(shù)的概念
函數(shù)乒验,也叫功能或方法锻全,函數(shù)將一段具備某項(xiàng)特殊功能的代碼段封裝成一個(gè)完整的結(jié)構(gòu)體。
函數(shù)的作用就是封裝一段功能代碼睹耐,可以被反復(fù)調(diào)用部翘,實(shí)現(xiàn)代碼的重用
函數(shù)的聲明
聲明語(yǔ)法:
function 函數(shù)名 (參數(shù)){
函數(shù)的結(jié)構(gòu)體;
}
函數(shù)在聲明時(shí)窖梁,函數(shù)體不會(huì)執(zhí)行夹囚,只有在被調(diào)用的時(shí)候才會(huì)執(zhí)行
函數(shù)的調(diào)用
函數(shù)調(diào)用方式: 函數(shù)名(參數(shù)),形如:foo();
函數(shù)參數(shù): 專(zhuān)門(mén)接收函數(shù)執(zhí)行時(shí)所必須的數(shù)據(jù)的變量
函數(shù)的參數(shù)可以設(shè)置0個(gè)或者多個(gè)假哎,參數(shù)之間用逗號(hào)隔開(kāi)
函數(shù)的參數(shù)有兩種名稱(chēng):形參和實(shí)參,其本質(zhì)都是各種類(lèi)型的數(shù)據(jù)變量
形參:形式參數(shù)肪虎, 在函數(shù)定義中惧蛹,()內(nèi)部的參數(shù)叫做形參,用來(lái)接收函數(shù)調(diào)用時(shí)實(shí)參傳遞過(guò)來(lái)的數(shù)據(jù)
實(shí)參:實(shí)際參數(shù)迅腔,在函數(shù)調(diào)用中靠娱,()中的參數(shù)就是實(shí)參像云,用來(lái)傳遞數(shù)據(jù)給形參使用
arguments對(duì)象
arguments對(duì)象是函數(shù)的一個(gè)內(nèi)置屬性,arguments對(duì)象中存儲(chǔ)著實(shí)參的所有值,是一個(gè)類(lèi)數(shù)組對(duì)象双抽,能夠通過(guò)遍歷進(jìn)行取值
函數(shù)的返回值
函數(shù)在執(zhí)行完畢后牍汹,會(huì)返回一個(gè)執(zhí)行結(jié)果,通過(guò)return關(guān)鍵字實(shí)現(xiàn)函數(shù)的返回值
如果不寫(xiě)return 語(yǔ)句嫁蛇,則函數(shù)默認(rèn)返回undefined
如果存在return 語(yǔ)句露该,則函數(shù)返回值為return 后面的數(shù)據(jù)
其中,如果函數(shù)內(nèi)部執(zhí)行了一個(gè)return語(yǔ)句抑党,則函數(shù)體之后的代碼將不會(huì)再執(zhí)行
作用域與作用域鏈
變量的可用范圍撵摆,scope
本質(zhì)其實(shí)是一個(gè)存儲(chǔ)多個(gè)變量的對(duì)象
js中存在兩種作用域:全局作用域和函數(shù)作用域
全局作用域:專(zhuān)門(mén)保存全局變量的對(duì)象
函數(shù)作用域:專(zhuān)門(mén)保存函數(shù)內(nèi)部的局部變量的對(duì)象
局部變量:只有在函數(shù)調(diào)用時(shí)的函數(shù)內(nèi)部才能使用
全局變量:在任何時(shí)候的任何位置都可被訪問(wèn)
作用域鏈:在對(duì)變量取值時(shí)特铝,都是從當(dāng)前定義變量的函數(shù)開(kāi)始查找壹瘟,如果當(dāng)前沒(méi)有定義該變量鳄逾,則從上層查找,直到查找到全局作用域澄者,這種查找過(guò)程中形成的鏈?zhǔn)浇Y(jié)構(gòu)请琳,就是作用域鏈
函數(shù)聲明提前問(wèn)題
在正式執(zhí)行程序前俄精,都會(huì)先對(duì)var 聲明的變量 和 function 聲明的函數(shù)進(jìn)行預(yù)解析,將變量和函數(shù)集中到當(dāng)前作用域的頂部進(jìn)行集中聲明嫌套,其中圾旨,先提升var 聲明的變量,再提升function 聲明的函數(shù)
賦值操作則留在原地
預(yù)解析完成后痹筛,再根據(jù)新的代碼順序廓鞠,從上往下按照既定的規(guī)律執(zhí)行js
函數(shù)表達(dá)式
函數(shù)表達(dá)式也是函數(shù)聲明的另一種方式,寫(xiě)法:
var 函數(shù)名 = function(參數(shù)){
函數(shù)體滋早;
return 返回值
}
使用函數(shù)表達(dá)式的方式進(jìn)行函數(shù)聲明時(shí)砌们,在預(yù)解析過(guò)程中怨绣,就不會(huì)進(jìn)行函數(shù)聲明提升了,而是進(jìn)行變量聲明提升
立即執(zhí)行函數(shù) IIFE
IIFE:Immediately-Invoked-Function-Expression篮撑,即時(shí)調(diào)用的函數(shù)表達(dá)式赢笨,表示在函數(shù)定義時(shí)就立即調(diào)用
要實(shí)現(xiàn)IIFE驮吱,必須將函數(shù)轉(zhuǎn)換為表達(dá)式形式萧吠,才能實(shí)現(xiàn)自調(diào)用
方法: 通過(guò)一定的手段纸型,讓函數(shù)參與特定的運(yùn)算,即在函數(shù)前加一些運(yùn)算符除破,如:
數(shù)學(xué)運(yùn)算符: +琼腔、 -、 ()
邏輯運(yùn)算符: 光坝!
IIFE最常用的就是通過(guò)加 () 運(yùn)算符來(lái)實(shí)現(xiàn)甥材,如:
(function(i){
console.log(i); // 1
})(1);
二、數(shù)組
多個(gè)數(shù)據(jù)或變量按一定順序保存在一個(gè)集合中土铺,則稱(chēng)這個(gè)集合為數(shù)組
創(chuàng)建數(shù)組
創(chuàng)建數(shù)組的4種方式
創(chuàng)建空數(shù)組
var 數(shù)組名 = []板鬓; --->在js中,數(shù)組的字面量就是 []創(chuàng)建數(shù)組的同時(shí)俭令,初始化數(shù)組中的每個(gè)元素
var 數(shù)組名 = [值1, 值2, 值3, ...];創(chuàng)建空數(shù)組
var 數(shù)組名 = new Array(n)部宿;
這種方法,創(chuàng)建一個(gè)數(shù)組類(lèi)型的對(duì)象赫蛇,n 表示初始化元素的個(gè)數(shù)雾叭,省略則表示空數(shù)組织狐,不省略則表示創(chuàng)建一個(gè)具有n個(gè)undefined值的數(shù)組創(chuàng)建數(shù)組同時(shí)初始化數(shù)組元素
var 數(shù)組名 = new Array(值1, 值2, 值3, ...)
其中 new Array 在一定情況下存在歧義筏勒,比如:new Array(3); 代表3個(gè)元素值為undefined的數(shù)組旺嬉,而不是元素值為3的數(shù)組。
獲取數(shù)組元素
通過(guò)數(shù)組的下標(biāo) i 來(lái)獲取數(shù)組的每一個(gè)元素捐顷,即 數(shù)組名[i] = 值
其中迅涮,i 從0開(kāi)始計(jì)算设易,按照整數(shù)開(kāi)始排序,如 0,1,2,3戏溺,...
數(shù)組的長(zhǎng)度
length屠尊,能記錄數(shù)組的數(shù)據(jù)總長(zhǎng)度,如 數(shù)組名.length
數(shù)組的長(zhǎng)度與數(shù)組最后一項(xiàng)的下標(biāo)存在一定關(guān)系托享,即最后一項(xiàng)的下標(biāo)等于數(shù)組的length-1
數(shù)組的長(zhǎng)度也不是固定的浸赫,可以發(fā)生更改既峡,當(dāng)數(shù)組的個(gè)數(shù)增加時(shí)信认,length值自動(dòng)跟著改變
數(shù)組length屬性有兩個(gè)固定用法:
- 獲取最后一個(gè)元素值:arr[arr.length - 1]
- 向數(shù)組末尾追加一個(gè)新元素: arr[arr.length] = 新值袱贮;
數(shù)組的遍歷
主要是根據(jù)數(shù)組的下標(biāo)在0 到 length - 1 之間迄沫,用for循環(huán)來(lái)對(duì)數(shù)組的每一個(gè)元素進(jìn)行訪問(wèn)卦方。
關(guān)聯(lián)數(shù)組
上面所講的是常規(guī)的索引數(shù)組,還有一種數(shù)組叫關(guān)聯(lián)數(shù)組困后,可自定義下標(biāo)摇予,
創(chuàng)建關(guān)聯(lián)數(shù)組的方法:
1、第一步宁昭,先創(chuàng)建空數(shù)組酗宋,var arr = [];
2、第二步寂曹,再向數(shù)組中添加元素回右,arr[key] = value; 如:arr[''name''] = "張三"翔烁,arr["age"] =30;
其中,key為字符串蹬屹, length屬性無(wú)效慨默,永遠(yuǎn)為0,同時(shí)憔杨,關(guān)聯(lián)數(shù)組中的key 不能重復(fù)蒜胖,如果訪問(wèn)不存在的下標(biāo)元素台谢,也不會(huì)保存岁经,返回undefined值
遍歷關(guān)聯(lián)數(shù)組:for (var key in arr) { } 結(jié)構(gòu)
三、對(duì)象
對(duì)象的基本概念
JS中的對(duì)象是無(wú)序?qū)傩缘募戏兀瑢傩钥梢允腔局怠⒑瘮?shù)等蒂胞。對(duì)象的結(jié)構(gòu)可以看成是一種鍵值對(duì)的形式条篷,值可以是數(shù)據(jù)和函數(shù)赴叹。
對(duì)象的創(chuàng)建
創(chuàng)建對(duì)象的最簡(jiǎn)單的方式:使用對(duì)象字面量賦值給變量,類(lèi)似數(shù)組
對(duì)象的字面量語(yǔ)法: {}涨椒,內(nèi)部可以存放多條數(shù)據(jù)绽媒,數(shù)據(jù)之間用逗號(hào)隔開(kāi)些椒,每條數(shù)據(jù)是以鍵值對(duì)的形式存在,即 k(屬性名): v(屬性值赢乓,值可以是任意類(lèi)型的數(shù)據(jù)石窑,簡(jiǎn)單數(shù)據(jù)類(lèi)型、函數(shù)躺屁、對(duì)象)经宏,如:
var obj = {
k1: v1,
k2: v2,
k3: v3
};
在對(duì)象中,特征耐亏,用屬性表示广辰, 行為,則用方法表示
對(duì)象方法和屬性的調(diào)用
在調(diào)用對(duì)象的屬性時(shí)李根,有兩種形式:
obj.屬性名 或者 obj["屬性名"]几睛,如果屬性是個(gè)變量,則只能使用 [] 的形式表示冀续,即 obj[屬性]
在調(diào)用對(duì)象的方法時(shí),需要在方法名后加()執(zhí)行必峰,即 obj.fn()
對(duì)象的遍歷
可以將對(duì)象看成是一種鍵值對(duì)形式的數(shù)據(jù)結(jié)構(gòu)洪唐,在遍歷對(duì)象時(shí),類(lèi)似數(shù)組吼蚁,通過(guò) for in 循環(huán)凭需,根據(jù)屬性名遍歷出每一項(xiàng)對(duì)應(yīng)的屬性值,即:
for(var key in obj){
var value = obj[key];
...
}