么是函數(shù)?
把一段相對(duì)獨(dú)立的具有特定功能的代碼塊封裝起來(lái),形成一個(gè)獨(dú)立實(shí)體,就是函數(shù),起個(gè)名字(函數(shù)名),在后續(xù)開(kāi)發(fā)中可以反復(fù)調(diào)用。函數(shù)的作用就是封裝一段代碼,將來(lái)可以重復(fù)使用。推薦了解黑馬程序員web前端課程。
為什么要使用函數(shù)?為了解決代碼的重用!減少代碼量。
函數(shù)的分類(lèi)
系統(tǒng)內(nèi)置函數(shù) 和 程序員自定義函數(shù)
定義函數(shù)
function 函數(shù)名([參數(shù)列表]){
函數(shù)體
}
結(jié)構(gòu)說(shuō)明:
·function它是定義函數(shù)的關(guān)鍵字 不可以省略。
·函數(shù)名它的命名規(guī)則與變量名是一樣的
·函數(shù)名后面緊跟著一對(duì)小括號(hào) 這一對(duì)小括號(hào)不能省略
·小括號(hào)里面可能有參數(shù),我們將其稱(chēng)之為形參
·小括號(hào)后面緊跟著一對(duì)大括號(hào) 這一對(duì)大括號(hào)不能省略
·大括號(hào)里面是函數(shù)體
注意:函數(shù)定義了一定要調(diào)用函數(shù)
調(diào)用函數(shù)
格式:
函數(shù)名([實(shí)參列表])
注意:在定義函數(shù)時(shí)如果有形參 反過(guò)來(lái)說(shuō) 在調(diào)用的時(shí)候也要有實(shí)參 但是這個(gè)不是絕對(duì)的!
同名函數(shù)后面的會(huì)將前面的覆蓋
函數(shù)一定是先定義后再調(diào)用
函數(shù)的參數(shù)
函數(shù)的參數(shù)分為兩種:
形式參數(shù)和實(shí)際參數(shù)
形式參數(shù):在定義函數(shù)的時(shí)候的參數(shù)就稱(chēng)之為形式參數(shù),簡(jiǎn)稱(chēng)“形參”。在定義函數(shù)的時(shí)候 在函數(shù)名的后面的小括號(hào)里面給的變量名。
實(shí)際參數(shù):在調(diào)用函數(shù)的時(shí)候的參數(shù)就稱(chēng)之為實(shí)際參數(shù),簡(jiǎn)稱(chēng)“實(shí)參”。
在一個(gè)函數(shù)中,參數(shù)的多少是根據(jù)功能來(lái)定義的!
使用函數(shù)來(lái)動(dòng)態(tài)的輸出M行N列的表格
一般在函數(shù)體里面不會(huì)有輸出語(yǔ)句,只會(huì)有一個(gè)return關(guān)鍵字,將我們要輸出的內(nèi)容返回給函數(shù)的調(diào)用者。
·return在英文中表示“返回”的意思
·return關(guān)鍵字是在函數(shù)體里面使用。
它在函數(shù)體使用有兩層含義:
2.它會(huì)向函數(shù)的調(diào)用者返回?cái)?shù)據(jù)(重點(diǎn))返回值
格式:return數(shù)據(jù);
在調(diào)用函數(shù)時(shí)可以定義一個(gè)變量要接收到這個(gè)函數(shù)的返回值
注意:
我們?cè)谝院蟮墓ぷ髦校瘮?shù)體里面盡量不要有輸出語(yǔ)句(document.write alert console.log ),盡量的使用return關(guān)鍵字將數(shù)據(jù)返回給函數(shù)的調(diào)用者。
特別強(qiáng)調(diào):
·在一個(gè)函數(shù)里面,return關(guān)鍵字可以有多個(gè),但是return只會(huì)執(zhí)行一次;
·return關(guān)鍵字它只能返回一個(gè)數(shù)據(jù),如果需要返回多個(gè)數(shù)據(jù),我們可以將多個(gè)數(shù)據(jù)使用數(shù)組的方式來(lái)保存,然后再將數(shù)組返回。
匿名函數(shù)
什么是匿名函數(shù)?
沒(méi)有名字的函數(shù) 稱(chēng)之為匿名函數(shù)!注意:匿名函數(shù)在JS中使用最多。
匿名函數(shù)也是需要調(diào)用的!
將匿名函數(shù)賦值給變量或者是事件
a)將匿名函數(shù)賦值給變量,然后通過(guò)變量名加上小括號(hào)來(lái)調(diào)用匿名函數(shù)
b)將匿名函數(shù)賦值給事件 *****
將匿名函數(shù)賦值給事件,那么匿名函數(shù)什么時(shí)候才會(huì)執(zhí)行?它要等到事件觸發(fā)了以后,匿名函數(shù)才會(huì)執(zhí)行。
什么是變量的作用域?
指變量在什么地方可以使用,什么地方不可以使用。
變量作用域的分類(lèi)
變量作用域分為:全局作用域和局部作用域。
變量的作用域是通過(guò)函數(shù)來(lái)進(jìn)行劃分的。
在函數(shù)外面定義的變量我們將其稱(chēng)為全局變量,它的作用域是全局的。
全局作用域: 在任何地方都可以訪(fǎng)問(wèn)到的變量就是全局變量,對(duì)應(yīng)全局作用域
局部作用域: 在固定的代碼片段內(nèi)可訪(fǎng)問(wèn)到的變量,最常見(jiàn)的例如函數(shù)內(nèi)部。對(duì)應(yīng)局部作用域(函數(shù)作用域)
問(wèn):是否能夠提升局部變量的作用域呢?將局部變量的作用域提升至全局作用域。在函數(shù)里面定義的變量也能夠在函數(shù)外面訪(fǎng)問(wèn)到。
只需要將函數(shù)里面定義的變量的var關(guān)鍵字給去掉就可以實(shí)現(xiàn)將局部變量的作用域提升至全局作用域。
但是:并不建議直接就var 關(guān)鍵字給省略,我們建議在函數(shù)的外面定義一個(gè)同名的全局變量。
果您已經(jīng)開(kāi)始學(xué)習(xí)JavaScript了,那是時(shí)候了解下基本函數(shù)了,本章節(jié)為大家分享JavaScript基本函數(shù)!
一般來(lái)說(shuō),函數(shù)是經(jīng)過(guò)精心挑選和設(shè)計(jì)以執(zhí)行特定任務(wù)的子程序。
它是一個(gè)對(duì)象。要執(zhí)行一個(gè)函數(shù),您將調(diào)用它,也稱(chēng)為調(diào)用函數(shù)。您還可以將值傳遞給函數(shù)以在函數(shù)中使用。事實(shí)上,函數(shù)總是會(huì)返回一個(gè)值。因此,如果您不指定返回值, JavaScript 函數(shù)將返回 undefined。
您可以通過(guò)多種方式在代碼中定義 JavaScript函數(shù)。首先,您將使用函數(shù)聲明。您可以使用關(guān)鍵字“function”創(chuàng)建函數(shù)聲明,然后添加函數(shù)的名稱(chēng)。當(dāng)您使用函數(shù)聲明時(shí),您將提升函數(shù)定義,這將允許您在定義函數(shù)之前使用它。
接下來(lái),您有一個(gè)任務(wù) JavaScript 函數(shù)表達(dá)式。這定義了一個(gè)匿名或命名的名字 JavaScript 函數(shù)。匿名函數(shù)是尚未命名的函數(shù)。因?yàn)楹瘮?shù)表達(dá)式不能被提升,所以在定義它們之前不能使用它們。
創(chuàng)建函數(shù)表達(dá)式的較短語(yǔ)法是箭頭函數(shù)。這種類(lèi)型的 JavaScript 函數(shù)不會(huì)創(chuàng)建自己的值。它僅用于編寫(xiě)不同的功能。
您可能聽(tīng)說(shuō)過(guò)“arguments”和“parameters”這兩個(gè)術(shù)語(yǔ)可以互換使用,這可能會(huì)導(dǎo)致您認(rèn)為它們是同一個(gè)東西。雖然這兩個(gè)術(shù)語(yǔ)在涉及 JavaScript 函數(shù)時(shí)非常相似,但您應(yīng)該了解一些非常重要的區(qū)別。
參數(shù)用于定義JavaScript 函數(shù)。這意味著參數(shù)是在定義 JavaScript 函數(shù)是最初創(chuàng)建的名稱(chēng)。在進(jìn)行函數(shù)定義時(shí),您可能會(huì)傳遞多達(dá) 255 個(gè) JavaScript 參數(shù)。使用逗號(hào)將參數(shù)與下一個(gè)參數(shù)隔開(kāi)。
當(dāng)您調(diào)用JavaScript 函數(shù)時(shí),您正在執(zhí)行該函數(shù),也稱(chēng)為調(diào)用它。要調(diào)用函數(shù),首先添加JavaScript 函數(shù)的名稱(chēng),后跟兩個(gè)括號(hào)。為了幫助您更好地理解 JavaScript的這個(gè)組件。
如果您當(dāng)前使用的是Google Chrome,請(qǐng)打開(kāi)開(kāi)發(fā)者控制臺(tái)。這將允許您練習(xí) JavaScript 函數(shù)。要打開(kāi)此開(kāi)發(fā)人員控制臺(tái),請(qǐng)按 Ctrl + Shift + J(對(duì)于 Windows)或Cmd + Opt + J(對(duì)于 Mac)。
首先,讓我們定義一個(gè)名為 logIt的 JavaScript 函數(shù)。這個(gè) JavaScript 函數(shù)將有一個(gè)參數(shù):“city”。執(zhí)行完此函數(shù)后,我們將名稱(chēng)記錄到控制臺(tái)中。它看起來(lái)像這樣:
如果你想調(diào)用這個(gè)函數(shù),你可以調(diào)用它并將它傳遞給一個(gè)參數(shù)。在此示例中,JavaScript 函數(shù)名為 Dallas。它看起來(lái)像這樣:
如果您的函數(shù)沒(méi)有任何參數(shù),則可以使用一組空括號(hào)來(lái)調(diào)用它。它看起來(lái)像這樣;
在 JavaScript 中,除非您另行指定,否則每個(gè)函數(shù)都將返回undefined。讓我們通過(guò)調(diào)用一個(gè)空的JavaScript 函數(shù)。
在上面的示例中,JavaScript 函數(shù)將返回 undefined。要自定義它將返回什么,我們可以使用關(guān)鍵字“return”,然后是我們希望它返回的值。
在上面的示例中,我們已經(jīng)告訴 JavaScript 函數(shù)我們希望它返回false。調(diào)用此函數(shù)允許這種情況發(fā)生。這很重要,因?yàn)楹瘮?shù)返回的值將返回給函數(shù)的調(diào)用者。
表達(dá)式將創(chuàng)建一個(gè) JavaScript 函數(shù),該函數(shù)將給出的一個(gè)值是什么 num 參數(shù)的兩倍的值。然后,您可以調(diào)用此 JavaScript 函數(shù)并未將返回的值保存到變量中:
注銷(xiāo)此測(cè)試值會(huì)返回結(jié)果為 9。關(guān)于 return 語(yǔ)句的另一個(gè)重要規(guī)則是它會(huì)立即停止函數(shù)。
函數(shù)本質(zhì)上是一個(gè)函數(shù)對(duì)象。這是一個(gè)事實(shí),即如果某些東西不是原始的,那么它就是一個(gè)對(duì)象。JavaScript對(duì)象用途廣泛;它甚至可以讓我們將 JavaScript 中的函數(shù)作為參數(shù)移動(dòng)到另一個(gè) JavaScript 函數(shù)。
當(dāng)一個(gè) JavaScript 函數(shù)接受另一個(gè)參數(shù)函數(shù)時(shí),這是一個(gè)高階函數(shù)。無(wú)論您目前是否參加了會(huì)議 JavaScript 訓(xùn)練營(yíng),您很可能已經(jīng)在 JavaScript 使用過(guò)一個(gè)高階函數(shù),但并沒(méi)有意識(shí)到這一點(diǎn)。這方面的兩個(gè)例子是Array.prototype.filter和Array.prototype.mapand。這些只是眾多高階函數(shù)中的一小部分。
總結(jié):總而言之,JavaScript 函數(shù)是一個(gè)對(duì)象。它是子程序的一部分,其目標(biāo)是完成一種特定類(lèi)型的任務(wù)。一個(gè) JavaScript 函數(shù)被提升,而一個(gè)表達(dá)式?jīng)]有。要執(zhí)行 JavaScript 函數(shù),您將調(diào)用它,這稱(chēng)為調(diào)用函數(shù)。您也可以將值傳遞給函數(shù),以便在函數(shù)中使用它,也稱(chēng)為參數(shù),而其本身的值是參數(shù)。一個(gè)函數(shù)總是會(huì)返回一個(gè)值,但是 JavaScript 中沒(méi)有返回值的函數(shù)會(huì)以未定義的形式返回。
avaScript 函數(shù)語(yǔ)法
函數(shù)就是包裹在花括號(hào)中的代碼塊,前面使用了關(guān)鍵詞 function:
function functionname()
{
這里是要執(zhí)行的代碼
}
當(dāng)調(diào)用該函數(shù)時(shí),會(huì)執(zhí)行函數(shù)內(nèi)的代碼。
可以在某事件發(fā)生時(shí)直接調(diào)用函數(shù)(比如當(dāng)用戶(hù)點(diǎn)擊按鈕時(shí)),并且可由 JavaScript 在任何位置進(jìn)行調(diào)用。
提示:JavaScript 對(duì)大小寫(xiě)敏感。關(guān)鍵詞 function 必須是小寫(xiě)的,并且必須以與函數(shù)名稱(chēng)相同的大小寫(xiě)來(lái)調(diào)用函數(shù)。
實(shí)例:
調(diào)用帶參數(shù)的函數(shù)
在調(diào)用函數(shù)時(shí),您可以向其傳遞值,這些值被稱(chēng)為參數(shù)。
這些參數(shù)可以在函數(shù)中使用。
您可以發(fā)送任意多的參數(shù),由逗號(hào) (,) 分隔:
myFunction(argument1,argument2)
當(dāng)您聲明函數(shù)時(shí),請(qǐng)把參數(shù)作為變量來(lái)聲明:
function myFunction(var1,var2) { 這里是要執(zhí)行的代碼 }
變量和參數(shù)必須以一致的順序出現(xiàn)。第一個(gè)變量就是第一個(gè)被傳遞的參數(shù)的給定的值,以此類(lèi)推。
實(shí)例:
就會(huì)彈出:
函數(shù)很靈活,您可以使用不同的參數(shù)來(lái)調(diào)用該函數(shù),這樣就會(huì)給出不同的消息
實(shí)例:
這里就不給截彈框圖了。
帶有返回值的函數(shù)
有時(shí),我們會(huì)希望函數(shù)將值返回調(diào)用它的地方。
通過(guò)使用 return 語(yǔ)句就可以實(shí)現(xiàn)。
在使用 return 語(yǔ)句時(shí),函數(shù)會(huì)停止執(zhí)行,并返回指定的值。
語(yǔ)法
function myFunction()
{
var x=5;return x;
}
上面的函數(shù)會(huì)返回值 5。
注釋?zhuān)赫麄€(gè) JavaScript 并不會(huì)停止執(zhí)行,僅僅是函數(shù)。JavaScript 將繼續(xù)執(zhí)行代碼,從調(diào)用函數(shù)的地方。
函數(shù)調(diào)用將被返回值取代:
var myVar=myFunction();
myVar 變量的值是 5,也就是函數(shù) "myFunction()" 所返回的值。
即使不把它保存為變量,您也可以使用返回值:
document.getElementById("demo").innerHTML=myFunction();
"demo" 元素的 innerHTML 將成為 5,也就是函數(shù) "myFunction()" 所返回的值。
您可以使返回值基于傳遞到函數(shù)中的參數(shù):
實(shí)例:
計(jì)算兩個(gè)數(shù)字的乘積,并返回結(jié)果:
"demo" 元素的 innerHTML 將是:12;注釋的求余。
在您僅僅希望退出函數(shù)時(shí) ,也可使用 return 語(yǔ)句。返回值是可選的:
function myFunction(a,b) { if (a>b) { return; } x=a+b }
如果 a 大于 b,則上面的代碼將退出函數(shù),并不會(huì)計(jì)算 a 和 b 的總和。
局部 JavaScript 變量
在 JavaScript 函數(shù)內(nèi)部聲明的變量(使用 var)是局部變量,所以只能在函數(shù)內(nèi)部訪(fǎng)問(wèn)它。(該變量的作用域是局部的)。
您可以在不同的函數(shù)中使用名稱(chēng)相同的局部變量,因?yàn)橹挥新暶鬟^(guò)該變量的函數(shù)才能識(shí)別出該變量。
只要函數(shù)運(yùn)行完畢,本地變量就會(huì)被刪除。
全局 JavaScript 變量
在函數(shù)外聲明的變量是全局變量,網(wǎng)頁(yè)上的所有腳本和函數(shù)都能訪(fǎng)問(wèn)它。
JavaScript 變量的生存期
JavaScript 變量的生命期從它們被聲明的時(shí)間開(kāi)始。
局部變量會(huì)在函數(shù)運(yùn)行以后被刪除。
全局變量會(huì)在頁(yè)面關(guān)閉后被刪除。
向未聲明的 JavaScript 變量來(lái)分配值
如果您把值賦給尚未聲明的變量,該變量將被自動(dòng)作為全局變量聲明。
這條語(yǔ)句:carname="Volvo";
將聲明一個(gè)全局變量 carname,即使它在函數(shù)內(nèi)執(zhí)行。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。