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