淺談JavaScript的函數(shù)及作用域
函數(shù)和作用域是JavaScript的重要組成部分,我們在使用JavaScript編寫程序的過程中經(jīng)常要用到這兩部分內(nèi)容,作為初學(xué)者,我經(jīng)常有困惑,借助寫此博文來鞏固下之前學(xué)習(xí)的內(nèi)容。
(一)JavaScript函數(shù)
JavaScript函數(shù)是指一個(gè)特定代碼塊,可能包含多條語句,可以通過名字來供其他語句調(diào)用以執(zhí)行函數(shù)包含的代碼語句。
1.JavaScript創(chuàng)建函數(shù)的方法有兩種:
函數(shù)聲明:
function funcDeclaration(){ return 'A is a function'; }
函數(shù)表達(dá)式:
var funExpression=function(){ return 'A is a function '; }
上述函數(shù)聲明和函數(shù)表達(dá)式的區(qū)別(注明:翻譯自:不同的方式來寫一個(gè)函數(shù))在:
JavaScript解析器中存在一種變量聲明被提升(hosting)的機(jī)制,也就是說變量(函數(shù))的聲明會(huì)被提升到作用域的最前面,即使寫代碼的時(shí)候是寫在最后面,也還是會(huì)被提升至最前面。
例如以下代碼段:
alert(foo); // function foo() {} alert(bar); // undefined function foo() {} var bar = function bar_fn() {}; alert(foo); // function foo() {} alert(bar); // function bar_fn() {}
輸出結(jié)果分別是function foo() {} 、undefined 、function foo() {} 和function bar_fn() {} 。
可以看到foo 的聲明寫在alert之后,仍然可以被正確調(diào)用,因?yàn)镴avaScript解釋器會(huì)將其提升到alert前面,而以函數(shù)表達(dá)式創(chuàng)建的函數(shù)bar則不享受此待遇。
所以,JavaScript 引擎執(zhí)行以上代碼的順序可能是這樣的:
- 創(chuàng)建變量foo和 bar,并將它們都賦值為undefined。
- 創(chuàng)建函數(shù) foo 的函數(shù)體,并將其賦值給變量foo。
- 執(zhí)行前面的兩個(gè) alert。
- 創(chuàng)建函數(shù) bar_fn ,并將其賦值給 bar。
- 執(zhí)行后面的兩個(gè) alert。
2.函數(shù)的參數(shù)
在調(diào)用函數(shù)時(shí),你可以向其傳遞值,這些值被稱為參數(shù)。
function printName(name){ console.log(name); } printName('Byron'); printName('Casper);
其中name是形參,'Byron'和'Casper'是實(shí)參。
說到函數(shù)的參數(shù),我們不得不提到arguments。此處涉及的內(nèi)容有點(diǎn)多,請看客們參考樓主之前轉(zhuǎn)載的javascript arguments。
3.函數(shù)重載
重載是很多面向?qū)ο笳Z言實(shí)現(xiàn)多態(tài)性的手段之一,在靜態(tài)語言中確定一個(gè)函數(shù)的手段是靠方法簽名--函數(shù)名+參數(shù)列表,也就是說相同名字的函數(shù)參數(shù)個(gè)數(shù)不同或者順序不同都被認(rèn)為是不同的函數(shù),成為函數(shù)重載。
在JavaScript中沒有函數(shù)重載的概念,函數(shù)通過名字確定唯一性,參數(shù)不同也被認(rèn)為是相同的函數(shù),后面的覆蓋前面的。
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
小程序中this.setData的使用和注意事項(xiàng)
這篇文章主要介紹了微信小程序中this.setData的使用和注意事項(xiàng),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08javascript fullscreen全屏實(shí)現(xiàn)代碼
用了實(shí)現(xiàn)打開一個(gè)滿屏的代碼2009-04-04js的window.showModalDialog及window.open用法實(shí)例分析
這篇文章主要介紹了js的window.showModalDialog及window.open用法,實(shí)例分析了window.showModalDialog與window.open方法的定義、功能與使用技巧,需要的朋友可以參考下2015-01-01微信小程序內(nèi)拖動(dòng)圖片實(shí)現(xiàn)移動(dòng)、放大、旋轉(zhuǎn)的方法
這篇文章主要介紹了微信小程序內(nèi)拖動(dòng)圖片實(shí)現(xiàn)移動(dòng)、放大、旋轉(zhuǎn)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09JavaScript實(shí)現(xiàn)跟隨滾動(dòng)緩沖運(yùn)動(dòng)廣告框
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)跟隨滾動(dòng)緩沖運(yùn)動(dòng)廣告框,頁面左右兩邊跟隨式廣告框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07js canvas實(shí)現(xiàn)QQ撥打電話特效
這篇文章主要為大家詳細(xì)介紹了js canvas實(shí)現(xiàn)QQ撥打電話特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05微信JSSDK實(shí)現(xiàn)打開攝像頭拍照再將相片保存到服務(wù)器
這篇文章主要介紹了微信JSSDK實(shí)現(xiàn)打開攝像頭拍照再將相片保存到服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11