1. 函數(shù)傳參
1)形參和實(shí)參需要一一對應(yīng)
function 函數(shù)名(形參列表){
函數(shù)體
return 返回值
}
實(shí)參:是具體的值厘灼,或變量,數(shù)組脸候,字符串等
函數(shù)調(diào)用時婿脸,在括號里寫進(jìn)去的參數(shù)
形參:是在函數(shù)定義時在括號里設(shè)定的參數(shù)
在函數(shù)體內(nèi)可以有多個
2)arguments可變參數(shù)數(shù)組
3)在函數(shù)定義的內(nèi)部,有一個數(shù)組烛占,arguments會接受函數(shù)調(diào)用的時候所有的實(shí)參,并按照從左到右的順序排列沟启,因此忆家,在js函數(shù)中形參可以與實(shí)際參數(shù)個數(shù)不同,通過arguments數(shù)組可以實(shí)現(xiàn)實(shí)參的調(diào)用
4)在函數(shù)定義的時候德迹,如果內(nèi)部沒有arguments弦赖,則形參和實(shí)參必須一一對應(yīng),有arguments的時候浦辨,可以省略形參蹬竖,因?yàn)閍rguments會將所有的實(shí)參接收為一個數(shù)組
function sum() {
var sum = 0;
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(sum(1, 2, 3, 4, 5));
2. 形參的默認(rèn)值
函數(shù)有時候在特殊情況下,可以給形參加上默認(rèn)值流酬,有默認(rèn)值時币厕,函數(shù)調(diào)用,可以不寫參數(shù)
function rand(min = '0', max = '100') {
return Math.round(Math.random() * (max - min) + min)
}
console.log(rand());
3. 變量的作用域
變量通常在兩個位置被聲明:
1)函數(shù)內(nèi) 局部變量 只能在定義的函數(shù)內(nèi)被訪問
2)函數(shù)外 全局變量 可以在程序的各個位置被訪問
通過var關(guān)鍵字來定義變量
如果局部變量和全局變量重名芽腾,函數(shù)執(zhí)行時訪問局部變量
4. 函數(shù)的嵌套
在函數(shù)的內(nèi)部旦装,去使用另外一個函數(shù)
函數(shù)的嵌套中,如果被嵌套的函數(shù)有參數(shù)摊滔,則外層函數(shù)需要跟被嵌套函數(shù)參數(shù)一一對應(yīng)
5. 變量作用域的污染
當(dāng)變量命名重復(fù)時阴绢,程序運(yùn)行的過程中,就可能會出錯
使用全局變量時艰躺,如果全局變量在多處聲明呻袭,后聲明的會覆蓋先聲明的語句,造成變量無法區(qū)分腺兴,這種情況稱為變量的污染
解決變法:利用函數(shù)來分割作用域左电,來進(jìn)行文件中變量作用域的分割
var qqq = 0;
(function (o) {
console.log(1);
var qwe = 100;
var qqq = 1;
console.log(qqq);
})(0);
6. 函數(shù)的執(zhí)行方式
事件綁定和調(diào)用
1)行間事件的綁定,本質(zhì)上是一個無返回值的函數(shù)的調(diào)用
<div class="box" onclick="fn(200)"></div>
2)函數(shù)內(nèi)部this關(guān)鍵字,永遠(yuǎn)指向函數(shù)的調(diào)用對象
3)行間事件中篓足,調(diào)用對象是標(biāo)簽本身段誊,所有l(wèi)og(this)輸出的是標(biāo)簽
4)當(dāng)函數(shù)直接調(diào)用的時候,調(diào)用方式是window對象栈拖,而一般情況下连舍,window對象自動省略,
7. 函數(shù)的幾種形式
1)無參無返回值
2)有參有返回值
3)無參有返回值
4)有參無返回值
8. 函數(shù)定義方法
1)字面量形式
必須在變量聲明后使用函數(shù)涩哟,在變量沒有聲明前不能使用(undefined)烟瞧,
var fn=function(){}
2)函數(shù)名
聲明一個函數(shù)闲坎,可以在任何地方調(diào)用
function fn(){}
3)自調(diào)用函數(shù)
匿名函數(shù)
自己調(diào)用自己,立即執(zhí)行燃领,但是只執(zhí)行一次
(function(形參列表){
函數(shù)體
})(實(shí)參列表);
(function (w){
console.log(w);
})(3);
9. 函數(shù)
定義:由事件驅(qū)動的或者當(dāng)它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊
同一段代碼在多處出現(xiàn)复罐,成為代碼冗余,維護(hù)不便搓茬,函數(shù)就是代碼中封裝復(fù)用的思想,將一塊重復(fù)執(zhí)行的代碼,通過一個標(biāo)識符來代替青灼,實(shí)現(xiàn)在一個地方定義,在多處使用的效果妓盲,方便維護(hù)
// 事件驅(qū)動
div1.onclick = function () {
// 被調(diào)用
function rand() { }
}
函數(shù)使用(包含兩個過程)
1.函數(shù)的定義
function 函數(shù)名(形參列表){
函數(shù)體
return 返回值
}
2.調(diào)用
回調(diào)函數(shù):將函數(shù)作為參數(shù)傳遞到另外的函數(shù)中執(zhí)行,一般情況下杂拨,回調(diào)函數(shù)必伴隨著分支語句
function c(callback) {
console.log(callback);
}
c(function d() {
return 1;
});
遞歸函數(shù):函數(shù)在內(nèi)部調(diào)用自身本身,必須有出口
var f = 0;
function e() {
f++;
if (f > 10) {
return;
} else {
e();
}
}