函數(shù)

1. 函數(shù)(方法):

實(shí)現(xiàn)了某一個(gè)功能的操作的集合。
函數(shù)的原則:功能單一。


2. 函數(shù)的定義(申明):

函數(shù)的定義并不會(huì)執(zhí)行函數(shù),函數(shù)生效是在調(diào)用的地方。

2.1 使用函數(shù)的關(guān)鍵字function申明

function name(){

}

2.1 使用函數(shù)表達(dá)式申明。一般使用的是匿名函數(shù)

var func = function(){
};
Odiv.onclick = function(){
};

2.3對(duì)象申明法

var func = new Function(a,b,c,'return a+b;')
var func = function(a,b,c){
return a+b;
}


3.函數(shù)的重復(fù)申明

函數(shù)的重復(fù)申明類似于變量的重復(fù)賦值,后面的會(huì)覆蓋前面的。
所以生效的永遠(yuǎn)是后面的函數(shù)。


4. 函數(shù)的提升

函數(shù)的提升類似于變量的提升,在JS里面所有的 變量申明以及函數(shù)申明都會(huì)在執(zhí)行代碼之前運(yùn)行。
函數(shù)內(nèi)部的變量申明,也會(huì)出現(xiàn)變量的提升,但是這個(gè)提升只能提升到函數(shù)的最前面,不能提升到函數(shù)的外部。


5.()

申明的時(shí)候,括號(hào)里面是放置參數(shù)的,不能省略,即使沒有參數(shù)也要有。
調(diào)用的時(shí)候,括號(hào)里面?zhèn)魅氲氖菍?shí)際的數(shù)據(jù),表示函數(shù)的執(zhí)行。


6. 函數(shù)的參數(shù)

JS參數(shù)的意義:能夠獲取到外面的“值”,但是里面的修改不會(huì)影響到外面。
形參:形式參數(shù),函數(shù)定義的括號(hào)里面的,只能是一個(gè)變量。相當(dāng)于一個(gè)占位符,沒有實(shí)際意義,只是方便函數(shù)里面去獲取外面的數(shù)據(jù)。相當(dāng)于給函數(shù)的內(nèi)部申明了一個(gè)變量,不過這個(gè)變量可以獲取外面的數(shù)據(jù)。
實(shí)參:實(shí)際參數(shù),函數(shù)調(diào)用的時(shí)候傳入函數(shù)內(nèi)部的數(shù)據(jù)。必須是具體的值或者變量。


7. 作用域

概念:變量起作用的區(qū)間
全局作用域:函數(shù)外面的叫做全局作用域
局部作用域:函數(shù)內(nèi)部的作用域叫做局部作用域
全局作用域的變量能夠在任何地方使用,局部作用域的變量只能在函數(shù)的內(nèi)部使用,不能再函數(shù)的外部使用。

作用域鏈:

JS所特有的。一個(gè)變量在函數(shù)內(nèi)部找不到的時(shí)候,回去函數(shù)外部查找,如果一直到最外部(window)沒找到那么就產(chǎn)生not defined 錯(cuò)誤,但是有時(shí)候并不是單純的內(nèi)部與外部關(guān)系,而是很多層。這個(gè)時(shí)候內(nèi)部要查找的時(shí)候就要一層一層向外查找,直到找到為止。這個(gè)就是作用域鏈。

8.返回值。

一個(gè)函數(shù)是實(shí)現(xiàn)某一個(gè)功能的,實(shí)現(xiàn)了沒有怎么判斷?
計(jì)算1-100之間所有數(shù)字的和。
function sum(){
var sum =0;
for(var i=1;i<101;i++){
sum+=i;
}
return sum;
}

var a = sum()+10;
函數(shù)胡執(zhí)行完成之后,內(nèi)部的結(jié)果想要告訴函數(shù)的調(diào)用者。那么就要使用函數(shù)的返回值,函數(shù)的返回值只能有一個(gè)。
語(yǔ)法是在所有的函數(shù)內(nèi)部的語(yǔ)句之后添加一條return語(yǔ)句。
想要返回什么就在return后面寫什么。
任何調(diào)用這個(gè)函數(shù)的地方都可以會(huì)去到這個(gè)返回值。


9.函數(shù)申明的優(yōu)先級(jí)

如果一個(gè)表達(dá)式申明的函數(shù)與一個(gè)使用function關(guān)鍵字申明的函數(shù)具有相同的調(diào)用方式。那么最終生效的永遠(yuǎn)是表達(dá)式申明的函數(shù),也就是說表達(dá)式申明的函數(shù)優(yōu)先級(jí)高。

10.不要在if以及所有判斷里面申明函數(shù)。


11.函數(shù)的屬性以及方法。

面向?qū)ο?。函?shù)也是一個(gè)對(duì)象。對(duì)象就是具有方法以及屬性的一個(gè)個(gè)頭。
name屬性: 函數(shù)名。
length屬性:形參參數(shù)的個(gè)數(shù)。
toString():函數(shù)字符串自己。


12.參數(shù)

參數(shù)的默認(rèn)值。有的參數(shù)并不是必須要傳遞的,沒有傳遞的時(shí)候可以設(shè)置一個(gè)默認(rèn)的來執(zhí)行。這個(gè)時(shí)候就可以使用默認(rèn)值語(yǔ)法。
一般來說函數(shù)的在調(diào)用的時(shí)候傳遞的參數(shù)的個(gè)數(shù)要和函數(shù)申明的時(shí)候申明的參數(shù)的個(gè)數(shù)要一致。如果某一個(gè)參數(shù)沒有傳遞,那么實(shí)參與形參的對(duì)應(yīng)關(guān)系式從前向后的。也就是說后面的參數(shù)總是被先省略。


13.參數(shù)的傳遞方式

值傳遞:
var a = 10;
b = a;
b = 11;
a = ? 10
對(duì)于簡(jiǎn)單數(shù)據(jù)類型的參數(shù)傳遞使用的就是值傳遞。(數(shù)字,字符串,布爾值)。
var a = 100;
function s(m){
console.log(m);
console.log(a);
m = 0;
console.log(m);
console.log(a);
}
s(a);
console.log(a);
console.log(m);
引用傳遞(地址傳遞):
var zhangsan = {};//對(duì)象
zhangsan.age = 18;
zhangsan.height = 178;
zhangsan.weight = 180;
function s(b){
b.age = 22;
}
s(zhangsan);
console.log(zhangsan.age);


14.arguments對(duì)象

參數(shù)對(duì)象,能夠在函數(shù)的內(nèi)部獲取到所有傳入的參數(shù)的集合。
是一個(gè)類數(shù)組對(duì)象。
出現(xiàn)原因:

  1. 如果傳入的參數(shù)的個(gè)數(shù)是不確定的。例如:返回傳入n個(gè)參數(shù)的最大值。

  2. 申明函數(shù)的時(shí)候參數(shù)的個(gè)數(shù)比調(diào)用函數(shù)的時(shí)候傳入的參數(shù)個(gè)數(shù)少。

15.函數(shù)分類

系統(tǒng)函數(shù),JS自己定義好的函數(shù)
自定義函數(shù),用戶自己定義的函數(shù)

.匿名函數(shù):沒有名稱的函數(shù),這個(gè)函數(shù)只是定義的時(shí)候直接賦值生效。
立即函數(shù)(自執(zhí)行函數(shù)):就是函數(shù)在定義的時(shí)候自動(dòng)調(diào)用一次。
不能使用在函數(shù)關(guān)鍵字申明的函數(shù)后面直接加上小括號(hào)不表示執(zhí)行,因?yàn)镴S的解析器認(rèn)為function開始的語(yǔ)句就是函數(shù)定義。

表達(dá)式申明:可以使用表達(dá)式申明的函數(shù)后面加上小括號(hào)表示執(zhí)行。
其實(shí)對(duì)于JS解析器來說只要不是function開始都可以實(shí)現(xiàn)自執(zhí)行。
(function s(){}());
(function(){})();
利用上面的這個(gè)自執(zhí)行的特點(diǎn),可以實(shí)現(xiàn)用戶的一個(gè)局部作用域空間,這樣可以防止變量的污染。
其實(shí)對(duì)于JS解析器來說只要不是使用function開始申明的函數(shù)都是可以加上小括號(hào)表示自執(zhí)行的。
!function s(){}();
~function(){}();
+function(){}();
-function(){}();


16.回調(diào)函數(shù)

就是在某一個(gè)地方(函數(shù)內(nèi)部)根據(jù)一個(gè)條件去調(diào)用其他函數(shù)。
在不修改原代碼的基礎(chǔ)上實(shí)現(xiàn)新的功能。
對(duì)修改封閉,對(duì)擴(kuò)展開放。開放封閉原則。

17.遞歸函數(shù)

在函數(shù)的內(nèi)部自己調(diào)用自己實(shí)現(xiàn)某一個(gè)操作。
遞歸函數(shù)是一定具有結(jié)束條件的,沒有結(jié)束條件就變成了死循環(huán)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)只定義一次,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的,函數(shù)的定義會(huì)包括一個(gè)稱為形參的標(biāo)識(shí)符列表,這些參數(shù)在...
    PySong閱讀 910評(píng)論 0 0
  • 函數(shù)只定義一次,但可能被執(zhí)行或調(diào)用任意次。JS函數(shù)是參數(shù)化的,函數(shù)的定義會(huì)包括一個(gè)稱為形參的標(biāo)識(shí)符列表,這些參數(shù)在...
    PySong閱讀 376評(píng)論 0 0
  • 函數(shù)就是最基本的一種代碼抽象的方式。 定義函數(shù)function abs(x) {if (x >=0){return...
    _我和你一樣閱讀 516評(píng)論 0 0
  • 函數(shù)是一段可以反復(fù)調(diào)用的代碼塊。函數(shù)還能接受輸入的參數(shù),不同的參數(shù)會(huì)返回不同的值。 概述 函數(shù)的聲明 JavaSc...
    許先生__閱讀 498評(píng)論 0 1
  • 1 概述 1.1函數(shù)的聲明 JavaScript 有三種聲明函數(shù)的方法。 (1)function 命令 funct...
    徵羽kid閱讀 455評(píng)論 0 1

友情鏈接更多精彩內(nèi)容