摘要:我是這樣做的這兩個(gè)函數(shù),分別對(duì)和其對(duì)應(yīng)的傳參做出修改,并彈出結(jié)果。這和書中論述無(wú)異。然而在第二個(gè)函數(shù)中,將強(qiáng)行賦值為,輸出按照作者以上的論述斜體字部分,里的值應(yīng)該保持不變,結(jié)果應(yīng)該為才對(duì)。此時(shí)的值始終為因此才會(huì)有輸出這一結(jié)果。
這本紅寶書相信大家很熟悉,甚至比我讀過(guò)的次數(shù)要多,不過(guò)今天在閱讀函數(shù)傳參部分章節(jié)時(shí),發(fā)現(xiàn)了書中一個(gè)可以算是小錯(cuò)誤的知識(shí)點(diǎn)。
我們知道,arguments作為一個(gè)類數(shù)組,和函數(shù)的傳參是一一對(duì)應(yīng)的,那么如果改變其中一個(gè)的值,會(huì)對(duì)另一個(gè)有什么影響呢?
在紅寶書第66頁(yè)第一段,作者給予了論述:
function doAdd(num1,num2){ arguments[1]=10; alert(arguments[0]+num2) }
“每次執(zhí)行這個(gè)doAdd()函數(shù)都會(huì)重寫第二個(gè)參數(shù),將第二個(gè)參數(shù)的值修改為10。因?yàn)閍rguments對(duì)象中的值會(huì)自動(dòng)反映到對(duì)應(yīng)的命名參數(shù),所以修改arguments[1],也就修改了num2,結(jié)果它們的值都會(huì)變成10。不過(guò),這并不是說(shuō)讀取這兩個(gè)值會(huì)訪問(wèn)相同的內(nèi)存空間;它們的內(nèi)存空間是獨(dú)立的,但它們的值會(huì)同步。但這種影響是單向的:修改命名參數(shù)不會(huì)改變argument中對(duì)應(yīng)的值”
這段解讀非常深刻,于是我趕快打開編輯器進(jìn)行嘗試。我是這樣做的:
function add1(num1,num2){ arguments[1]=10; alert(num1+num2); } function add2(num1,num2){ num2=10; alert(arguments[0]+arguments[1]); } add1(20,5); add2(3,5); add1(20);
這兩個(gè)函數(shù),分別對(duì)arguments[1]和其對(duì)應(yīng)的傳參num2做出修改,并彈出結(jié)果。在第一個(gè)函數(shù)中,因?yàn)榻oarguments[1]賦值這個(gè)動(dòng)作將num2的值強(qiáng)行替換為10,所以在調(diào)用add1(20,5)時(shí),我們得到的是num1+num2=20+10=30。這和書中論述無(wú)異。
然而在第二個(gè)函數(shù)add2中,將num2強(qiáng)行賦值為10,輸出arguments[0]+arguments[1],按照作者以上的論述(斜體字部分),argument里的值應(yīng)該保持不變,結(jié)果應(yīng)該為3+5=8才對(duì)。但是瀏覽器結(jié)果最后給出的結(jié)果為13(3+10),在火狐、谷歌和IE下結(jié)果一致。這說(shuō)明,改變傳參的值,同樣可以反過(guò)來(lái)改變對(duì)應(yīng)arguments的值,兩者的改變是相通的。
另外,如果只給add1傳入一個(gè)參數(shù),瀏覽器最后給出的結(jié)果為NaN,這說(shuō)明:如果只傳了一個(gè)值,那么為arguments[1]設(shè)置的值不會(huì)反應(yīng)到命名參數(shù)中去,因?yàn)閍rguments對(duì)象的長(zhǎng)度是由傳入的參數(shù)個(gè)數(shù)決定的。此時(shí)num2的值始終為undefined,因此才會(huì)有輸出NaN這一結(jié)果。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90934.html
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡(jiǎn)單的頁(yè)面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡(jiǎn)單的頁(yè)面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
摘要:本文最早為雙十一而作,原標(biāo)題雙大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在上。發(fā)布完本次預(yù)告后,捕捉到了一個(gè)友善的吐槽讀書清單也要收費(fèi)。這本書便從的異步編程講起,幫助我們?cè)O(shè)計(jì)快速響應(yīng)的網(wǎng)絡(luò)應(yīng)用,而非簡(jiǎn)單的頁(yè)面。 本文最早為雙十一而作,原標(biāo)題雙 11 大前端工程師讀書清單,以付費(fèi)的形式發(fā)布在 GitChat 上。發(fā)布之后在讀者圈群聊中和讀者進(jìn)行了深入的交流,現(xiàn)免費(fèi)分享到這里,不足之處歡迎指教...
摘要:類型沒有重載聲明了兩個(gè)同名函數(shù),而結(jié)果則是后面的函數(shù)覆蓋了前面的函數(shù)。引用的是函數(shù)據(jù)以執(zhí)行的環(huán)境對(duì)象函數(shù)屬性和方法表示函數(shù)希望接收的命名參數(shù)的個(gè)數(shù)。而自動(dòng)創(chuàng)建的基本包裝類型的對(duì)象,則只存在于一行代碼的執(zhí)行瞬間,然后立即被銷毀。 Function類型 沒有重載 聲明了兩個(gè)同名函數(shù),而結(jié)果則是后面的函數(shù)覆蓋了前面的函數(shù)。 var addSomeNumber = function (num)...
閱讀 1552·2023-04-26 02:29
閱讀 3016·2021-10-11 10:58
閱讀 2894·2021-10-08 10:16
閱讀 3155·2021-09-24 09:47
閱讀 1563·2019-08-29 16:56
閱讀 2711·2019-08-29 11:03
閱讀 1992·2019-08-26 13:35
閱讀 3167·2019-08-26 13:34