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