JavaScript學(xué)習(xí)筆記(4):函數(shù)

1,“函數(shù)對(duì)于任何語(yǔ)言來(lái)說都是一個(gè)核心概念。通過函數(shù)可以封裝任意多條語(yǔ)句,而且可以在任何地方任何時(shí)候調(diào)用執(zhí)行。ECMAScript中的函數(shù)使用function關(guān)鍵字來(lái)進(jìn)行聲明,后跟一組參數(shù)以及函數(shù)體。”

function sayHi(name,message){

alert("Hello,"+name+","+message);

}

var name1="Lilei";

var message1="look how they shine for you!";

sayHi(name1,message1);

2,“js中的函數(shù)在定義時(shí)不需要指定是否有返回值。實(shí)際上,任何函數(shù)任何時(shí)候都可以通過return語(yǔ)句后面跟要返回的值來(lái)實(shí)現(xiàn)返回值。”

3,“ECMAScript函數(shù)的參數(shù)與大多數(shù)其他語(yǔ)言的參數(shù)有所不同。ECMAScript函數(shù)并不介意傳遞進(jìn)來(lái)多少個(gè)參數(shù),也不在乎傳來(lái)的的參數(shù)是什么數(shù)據(jù)類型。也就是說,即便你定義的函數(shù)只接受兩個(gè)參數(shù),在調(diào)用這個(gè)函數(shù)時(shí)也未必一定要傳遞兩個(gè)參數(shù)。可以傳遞一個(gè),三個(gè)甚至不傳遞參數(shù),而解析器永遠(yuǎn)不會(huì)有什么怨言(這解析器脾氣真好)。之所以會(huì)這樣,原因是ECMAScript中的參數(shù)在內(nèi)部是用一個(gè)數(shù)組來(lái)表示的。函數(shù)接收到的始終是這個(gè)數(shù)組,而不關(guān)心數(shù)組中包含哪些參數(shù)(如果有參數(shù)的話)。如果這個(gè)數(shù)組中不包含任何元素,無(wú)所謂;如果包含多個(gè)元素,也沒有問題。實(shí)際上,在函數(shù)體內(nèi)就可以通過arguments對(duì)象來(lái)訪問和這個(gè)參數(shù)數(shù)組。從而獲取傳遞給函數(shù)的每一個(gè)參數(shù)。其實(shí),arguments對(duì)象只是與數(shù)組類似(它并不是Array的實(shí)例),因?yàn)榭梢允褂梅嚼ㄌ?hào)語(yǔ)法訪問它的每一個(gè)元素,使用length屬性來(lái)確定傳遞進(jìn)來(lái)多少個(gè)參數(shù)。在前面的例子中,sayHi()函數(shù)的第一個(gè)參數(shù)的名字叫做name,而該參數(shù)的值也可以通過訪問arguments[0]來(lái)獲取。”

4,對(duì)于js函數(shù)來(lái)說,命名的參數(shù)只提供便利,并不是必須的。

function sayHi(){

alert("Hello"+arguments[0]+","+arguments[1]);

}

5,可以在函數(shù)體內(nèi)部對(duì)函數(shù)的參數(shù)進(jìn)行重寫。

function doAdd(){

if(arguments.length ==1){

alert(arguments[0]+10);

}else if(arguments.length==2){

alert(arguments[0]+arguments[1]);

}else(

alert("參數(shù)個(gè)數(shù)大于兩個(gè)了。")

)

}

doAdd(10);

doAdd(23,39);

doAdd(23,34,123);

6,“關(guān)于arguments的行為,還有一點(diǎn)比較有意思的是,它的值永遠(yuǎn)與對(duì)應(yīng)命名參數(shù)的值保持同步。”

function add(num1,num2){

arguments[1]=100;

window.console.info("兩個(gè)參數(shù)之和為:"+(arguments[0]+arguments[1]));

}

add(352,4678);

7,“ECAMScript函數(shù)不能像傳統(tǒng)意義上那樣實(shí)現(xiàn)重載。而在其他語(yǔ)言中,可以為一個(gè)函數(shù)編寫兩個(gè)定義,只要這兩個(gè)定義的簽名(接受的參數(shù)類型和數(shù)量)不同即可。如前所述,ECMAScript函數(shù)沒有簽名,因?yàn)槠鋮?shù)是由包含零或者多個(gè)值得數(shù)組來(lái)表示的,而沒有函數(shù)簽名,真正意義上的重載是不可能做到的。”

如果我們編寫了兩個(gè)名字和參數(shù)個(gè)數(shù)一樣的函數(shù),則后面寫的函數(shù)會(huì)覆蓋掉前面的函數(shù)。

function addSomeNumber(num){

return num+100;

}

function addSomeNumber(num){

return num+200;

}

window.console.info(addSomeNumber(100));

8,小結(jié)

a,js中的基本數(shù)據(jù)類型包括:Undefined,Null,Boolean,Number,String。

b,與其他語(yǔ)言不同,js沒有為整數(shù)和浮點(diǎn)數(shù)值分別定義不同的數(shù)據(jù)類型,Number類型可用于表示所有數(shù)值。

c,js中也有一種復(fù)雜的數(shù)據(jù)類型,即Object類型,該類型是這門語(yǔ)言中所有對(duì)象的基礎(chǔ)類型。

d,嚴(yán)格模式為這門語(yǔ)言容易出錯(cuò)的地方施加了限制。

e,js提供了很多與c以及其他類c語(yǔ)言中相同的基本操作符,包括算術(shù)操作符,布爾操作符,關(guān)系操作符,相等操作符以及賦值操作符等。

f,js從其他語(yǔ)言借鑒了很多流程控制語(yǔ)句,例如if語(yǔ)句,for語(yǔ)句和switch語(yǔ)句等,js中的函數(shù)與其他語(yǔ)言中的函數(shù)有很多不同的地方,特別最參數(shù)的理解上。

g,js無(wú)需指定函數(shù)的煩hi之,因?yàn)槿魏蝚s函數(shù)都可以在任何時(shí)候返回任何值。未指定返回值的函數(shù)返回的是一個(gè)特殊的undefined值。

h,js中的函數(shù)沒有函數(shù)簽名的概念,因?yàn)槠浜瘮?shù)參數(shù)是以一個(gè)包含零或者多個(gè)值得數(shù)組的形式傳遞的。

i,可以向js函數(shù)傳遞任意數(shù)量的參數(shù),并且可以通過arguments對(duì)象來(lái)訪問這些參數(shù)。

j,由于不存在函數(shù)簽名的特性,js函數(shù)不能重載。


本節(jié)源碼下載地址:JavaScript學(xué)習(xí)筆記(4):函數(shù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,238評(píng)論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,339評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,713評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評(píng)論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,893評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,448評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,201評(píng)論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,397評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,631評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,128評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,347評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,263評(píng)論 0 4
  • 第一章: JS簡(jiǎn)介 從當(dāng)初簡(jiǎn)單的語(yǔ)言,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,688評(píng)論 0 6
  • ECMAScript關(guān)鍵字 delete do else finally function in instance...
    doudou2閱讀 725評(píng)論 0 0
  • 有人說過,很多彎路到最后都成了直路,所有的坑到最后也都成了坦途;所謂的直路和坦途并不是擺在眼前的,都是不斷的的...
    老衲法號(hào)一眉道人閱讀 1,353評(píng)論 0 4
  • 以前,總盼著早點(diǎn)退出團(tuán)學(xué),現(xiàn)在終于退休了,開心之余,也很高興能夠在部門里認(rèn)識(shí)到那么多朋友,可以相互扶持一起走的朋友...
    井jin閱讀 247評(píng)論 0 0