JavaScript的function函數(shù)詳細(xì)介紹
通過函數(shù)來封裝任意多條語句,而且可以在任何地方、任何時(shí)間調(diào)用執(zhí)行。
而我們的JavaScript
腳本語言比較特殊,相對(duì)于C語言,它的參數(shù)是不需要數(shù)據(jù)類型加持的。返回值return
,我就不過多描述,他是和 C語言通的,如果沒寫他就會(huì)自動(dòng)返回undefined
function fun(x,y){ } //寫成這樣就可以聲明一個(gè)函數(shù)
以我的理解他就是以對(duì)象的形式來傳入?yún)?shù),通過對(duì)象的各項(xiàng)屬性值(引用類型的值),來作為我的實(shí)際參數(shù),
例如我有以下做法:
function fun(x, y) { // alert("x的值是" + x.value); alert("x的值是" + x); }
當(dāng)我是這種操作的時(shí)候,他的彈出框報(bào)錯(cuò)是:x的值是[object HTMLInputElement],
以對(duì)象的形式傳入的它是不符合我的邏輯設(shè)計(jì)的,應(yīng)該是下面的這種做法。
返回我的x的value
值。
function fun(x, y) { alert("x的值是" + x.value); // alert("x的值是" + x); }
- 所以當(dāng)我設(shè)計(jì)一個(gè)簡(jiǎn)單的,兩個(gè)整數(shù)數(shù)字相乘,返回值。
- 這里就要特別記憶一下
<form></form>
要把輸入的這一段html
代碼寫在這個(gè)標(biāo)簽里。不然你將會(huì)找好半天錯(cuò)誤(別問我怎么知道的,說多了都是淚)
咋們是深度理解,先別急,再看看這段代碼:
是不是著這里有著不一樣的發(fā)現(xiàn),照以前的這個(gè)函數(shù)寫法,鐵定是在亂寫,是不是?但是他在這里是能運(yùn)行的,笑死(開心的笑)
也就是說ECMAScript
函數(shù)不介意傳進(jìn)來多少個(gè)參數(shù),也不在乎你傳進(jìn)來個(gè)神馬參數(shù),解析器永遠(yuǎn)都不會(huì)有任何怨言。(太爽了,老師再也不用擔(dān)心我不會(huì)傳參了),那他是如何解決這個(gè)“世紀(jì)難題 ”的呢,其實(shí)在每個(gè)函數(shù)體內(nèi),都有一個(gè)arguments
對(duì)象來訪問這個(gè)參數(shù)數(shù)組,從而獲取傳遞給數(shù)組的每一個(gè)參數(shù)。
道友試試給下面代碼fun
函數(shù)用雙引號(hào)fun
(“勇敢”,“牛?!?,會(huì)發(fā)生什么現(xiàn)象,解釋一下就是上引號(hào)就近配對(duì),嗚嗚嗚嗚
哎,這和咱們學(xué)的java
函數(shù)重載是不是有點(diǎn)那味道了呀,其實(shí)JavaScript
是沒有重載滴。
再看兩個(gè)例子:
function fun() { if (arguments.length == 1) { alert(arguments[0] + 10); } if (arguments.length == 2) { alert(arguments[0] + arguments[1]); } } fun(10);//20 fun(10,20);//30
也只能通過傳入?yún)?shù)的個(gè)數(shù)上,實(shí)現(xiàn)適當(dāng)?shù)墓δ?,并不是?shí)現(xiàn)真正意義上的重載,雖然特性算不上完美的重載,但是也足夠彌補(bǔ)JavaScript
的這一遺憾。arguments
也可以與參數(shù)與一起使用,
如下:
function fun(num1, num2) { if (arguments.length == 1) { alert(num1 + 10); } if (arguments.length == 2) { alert(arguments[0] + num2); } } fun(10);//20 fun(10, 20);//30
那么就有寶問了,參數(shù)反正都是賦值在arguments
對(duì)象中,那么我直接修改 arguments[i]
值是否可行呢?
- 那有意思的是,關(guān)于
arguments
行為,它的值永遠(yuǎn)與對(duì)應(yīng)的命名參數(shù)值保持同步,他會(huì)修改當(dāng)下函數(shù)內(nèi)的值?。?!,也就是說參數(shù)與arguments[i]
內(nèi)存空間時(shí)獨(dú)立的,但是值會(huì)同步。
function fun(num1, num2) { arguments[1] = 10; alert(arguments[0] + num2); } </script> <form> <br><input type="button" onclick="fun(10,20)" value="點(diǎn)擊"> </form>
他彈出框的值就是20;可見是修改arguments[i]
值,會(huì)自動(dòng)反應(yīng)到這個(gè)參數(shù)當(dāng)中,要是沒有這個(gè)參數(shù),重寫這個(gè)參數(shù)值,將會(huì)導(dǎo)致語法錯(cuò)誤。代碼不會(huì)執(zhí)行。如果有兩個(gè)相同的函數(shù)名他不會(huì)報(bào)錯(cuò),但是該名字只屬于后定義的函數(shù)。
總結(jié):
JavaScript
函數(shù)與其他語言函數(shù)有很多細(xì)節(jié)之處不同。- 無需非得要返回值,因?yàn)樵谌魏螘r(shí)候他都可以返回任何值
arguments.length
長(zhǎng)度由傳入?yún)?shù)的個(gè)數(shù)確定,而不是定義時(shí)函數(shù)的命名數(shù)決定。- 是沒有重載的,即參數(shù)是可以0個(gè)或者多個(gè)的的數(shù)組形式參與的,并且通過
arguments
對(duì)象來訪問這些參數(shù)。
到此這篇關(guān)于JavaScript
的function
函數(shù)詳細(xì)介紹的文章就介紹到這了,更多相關(guān)JavaScript的function函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- javascript function(函數(shù)類型)使用與注意事項(xiàng)小結(jié)
- JavaScript函數(shù)式編程(Functional Programming)組合函數(shù)(Composition)用法分析
- JavaScript函數(shù)式編程(Functional Programming)箭頭函數(shù)(Arrow functions)用法分析
- JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order functions)用法分析
- JavaScript函數(shù)式編程(Functional Programming)純函數(shù)用法分析
- JavaScript函數(shù)式編程(Functional Programming)聲明式與命令式實(shí)例分析
- JS中注入eval, Function等系統(tǒng)函數(shù)截獲動(dòng)態(tài)代碼
- 說說Vue.js中的functional函數(shù)化組件的使用
相關(guān)文章
前端項(xiàng)目中監(jiān)聽localStorage的變化
這篇文章主要為大家介紹了前端項(xiàng)目中監(jiān)聽localStorage的變化的解決思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06微信小程序 定位到當(dāng)前城市實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了微信小程序 定位到當(dāng)前城市實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02JavaScript實(shí)際應(yīng)用:innerHTMl和確認(rèn)提示的使用
JavaScript實(shí)際應(yīng)用:innerHTMl和確認(rèn)提示的使用...2006-06-06一文了解JavaScript用Element?Traversal新屬性遍歷子元素
這篇文章主要介紹了一文了解JavaScript用Element?Traversal新屬性遍歷子元素,文章圍繞Element?Traversal新屬性的相關(guān)資料展開詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對(duì)大家有所幫助2021-11-11微信小程序 this和that詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了微信小程序 this和that詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02關(guān)于js typeof 與 instanceof 判斷數(shù)據(jù)類型區(qū)別及開發(fā)使用
我們經(jīng)常會(huì)遇到判斷一個(gè)變量的數(shù)據(jù)類型或該變量是否為空值的情況,你是如何去選擇判斷類型操作符的?本文來記錄一下我們開發(fā)人員必須掌握關(guān)于 typeof 和 instanceof 的知識(shí)點(diǎn)及在開發(fā)中的使用建議,同時(shí)在面試過程中也經(jīng)常會(huì)遇到這樣的問題,需要的朋友可參考下文章內(nèi)容2021-10-10