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