1. 函數(shù)傳參
1)形參和實參需要一一對應
function 函數(shù)名(形參列表){
函數(shù)體
return 返回值
}
實參:是具體的值宽闲,或變量,數(shù)組握牧,字符串等
函數(shù)調(diào)用時容诬,在括號里寫進去的參數(shù)
形參:是在函數(shù)定義時在括號里設定的參數(shù)
在函數(shù)體內(nèi)可以有多個
2)arguments可變參數(shù)數(shù)組
3)在函數(shù)定義的內(nèi)部,有一個數(shù)組沿腰,arguments會接受函數(shù)調(diào)用的時候所有的實參览徒,并按照從左到右的順序排列,因此颂龙,在js函數(shù)中形參可以與實際參數(shù)個數(shù)不同习蓬,通過arguments數(shù)組可以實現(xiàn)實參的調(diào)用
4)在函數(shù)定義的時候,如果內(nèi)部沒有arguments措嵌,則形參和實參必須一一對應躲叼,有arguments的時候,可以省略形參企巢,因為arguments會將所有的實參接收為一個數(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. 形參的默認值
函數(shù)有時候在特殊情況下枫慷,可以給形參加上默認值,有默認值時,函數(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關鍵字來定義變量
如果局部變量和全局變量重名探孝,函數(shù)執(zhí)行時訪問局部變量
4. 函數(shù)的嵌套
在函數(shù)的內(nèi)部,去使用另外一個函數(shù)
函數(shù)的嵌套中誉裆,如果被嵌套的函數(shù)有參數(shù)再姑,則外層函數(shù)需要跟被嵌套函數(shù)參數(shù)一一對應
5. 變量作用域的污染
當變量命名重復時,程序運行的過程中找御,就可能會出錯
使用全局變量時元镀,如果全局變量在多處聲明,后聲明的會覆蓋先聲明的語句霎桅,造成變量無法區(qū)分栖疑,這種情況稱為變量的污染
解決變法:利用函數(shù)來分割作用域,來進行文件中變量作用域的分割
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關鍵字遇革,永遠指向函數(shù)的調(diào)用對象
3)行間事件中,調(diào)用對象是標簽本身揭糕,所有l(wèi)og(this)輸出的是標簽
4)當函數(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ù)體
})(實參列表);
(function (w){
console.log(w);
})(3);
9. 函數(shù)
定義:由事件驅(qū)動的或者當它被調(diào)用時執(zhí)行的可重復使用的代碼塊
同一段代碼在多處出現(xiàn)昂勒,成為代碼冗余,維護不便舟铜,函數(shù)就是代碼中封裝復用的思想戈盈,將一塊重復執(zhí)行的代碼,通過一個標識符來代替谆刨,實現(xiàn)在一個地方定義塘娶,在多處使用的效果,方便維護
// 事件驅(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();
}
}
閉包
定義:
在函數(shù)內(nèi)部定義一個函數(shù)血柳,在內(nèi)部函數(shù)中,操作外部函數(shù)的變量生兆,并在函數(shù)外調(diào)用內(nèi)部函數(shù)难捌,所形成的閉合回路叫閉包
特點:
可以使外部函數(shù)的局部變量暫存膝宁,不會銷毀
用途:
避免全局變量污染,變量長期駐扎在內(nèi)存中
總結(jié):
函數(shù)內(nèi)聲明一個函數(shù)根吁,并對外層函數(shù)內(nèi)的變量進行操作员淫,而且在函數(shù)體外部觸發(fā)內(nèi)部函數(shù),這其中所形成的的閉合回路叫閉包
function A() {
var a;
function B() {
a = 0;
console.log(a);
}
}
A();
B();