摘要:之前看高級(jí)程序設(shè)計(jì)時(shí)就遇到過(guò)一個(gè)問(wèn)題,就是函數(shù)傳參的問(wèn)題,書上說(shuō)是按值傳遞,而非按引用傳遞。我個(gè)人理解就是,中全部是按值傳遞。
之前看《javascript高級(jí)程序設(shè)計(jì)》時(shí)就遇到過(guò)一個(gè)問(wèn)題,就是函數(shù)傳參的問(wèn)題,書上說(shuō)是按值傳遞,而非按引用傳遞。很多人都會(huì)認(rèn)為js里面有兩種傳值方式,一種是復(fù)制,另一種是數(shù)組、對(duì)象等按引用傳遞,后來(lái)看到知乎上面一道題后才發(fā)現(xiàn)不是那么簡(jiǎn)單。我個(gè)人理解就是,js中全部是按值傳遞。
這個(gè)是高級(jí)程序設(shè)計(jì)里面的例子:
也許很多人會(huì)迷惑,person.name不該是Greg嗎?為什么輸出Nicholas?
因?yàn)閟etName函數(shù)里面其實(shí)相當(dāng)于把person對(duì)象的地址復(fù)制了一份,然后賦值給了obj,但是obj=new Object()這句將另外一個(gè)地址賦值給了obj,所以下面obj不管怎么修改都不會(huì)影響person。
這里還有另外一個(gè)例子:
var a=[1,2,3]; var b=a; a=[1,2,3,4]; console.log(b); //1,2,3
按照正常的想法,a和b是引用的同一個(gè)數(shù)組對(duì)象,當(dāng)a改變的時(shí)候,b也會(huì)改變,可是這里面b卻沒有改變,難道這個(gè)是單純的復(fù)制a的值給b?
這個(gè)和上面的例子差不多,也是把a(bǔ)指向?qū)ο蟮牡刂窂?fù)制給了b,然后a=[4,5,6]相當(dāng)于a指向了另外一個(gè)數(shù)組,所以b還指向原來(lái)的數(shù)組,并不會(huì)發(fā)生變化。
這里還有一個(gè)例子:
var a=[1,2,3]; var b=a; a.push(4); console.log(b); //[1,2,3,4]
這里面因?yàn)閍改變的還是原來(lái)數(shù)組,所以b也會(huì)跟著變化。
最后奉上一道自己筆試做錯(cuò)的題。
var test1=new Boolean("false"); console.log(test1); //true
注意:如果邏輯對(duì)象無(wú)初始值或者其值為 0、-0、null、""、false、undefined 或者 NaN,那么對(duì)象的值為 false。否則,其值為 true(即使當(dāng)自變量為字符串 "false" 時(shí))!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/50049.html
摘要:中所有函數(shù)的參數(shù)都是按值傳遞的。基本類型本身是按值傳遞,具有不可變性,對(duì)基本類型的修改,實(shí)質(zhì)上都是在棧內(nèi)存中創(chuàng)建了新的值。中把這種拷貝也認(rèn)為是按值傳遞。 本文共 1200 字,讀完只需 5 分鐘 概述 參數(shù)的傳遞分為按值傳遞和按引用傳遞,而 JavaScript 中參數(shù)的傳遞只有按值傳遞。 ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。 所謂按值傳遞就是: 把函數(shù)外部的值復(fù)制給...
摘要:之前看高級(jí)程序設(shè)計(jì)時(shí)就遇到過(guò)一個(gè)問(wèn)題,就是函數(shù)傳參的問(wèn)題,書上說(shuō)是按值傳遞,而非按引用傳遞。我個(gè)人理解就是,中全部是按值傳遞。 之前看《javascript高級(jí)程序設(shè)計(jì)》時(shí)就遇到過(guò)一個(gè)問(wèn)題,就是函數(shù)傳參的問(wèn)題,書上說(shuō)是按值傳遞,而非按引用傳遞。很多人都會(huì)認(rèn)為js里面有兩種傳值方式,一種是復(fù)制,另一種是數(shù)組、對(duì)象等按引用傳遞,后來(lái)看到知乎上面一道題后才發(fā)現(xiàn)不是那么簡(jiǎn)單。我個(gè)人理解就是,j...
摘要:之前看高級(jí)程序設(shè)計(jì)時(shí)就遇到過(guò)一個(gè)問(wèn)題,就是函數(shù)傳參的問(wèn)題,書上說(shuō)是按值傳遞,而非按引用傳遞。我個(gè)人理解就是,中全部是按值傳遞。 之前看《javascript高級(jí)程序設(shè)計(jì)》時(shí)就遇到過(guò)一個(gè)問(wèn)題,就是函數(shù)傳參的問(wèn)題,書上說(shuō)是按值傳遞,而非按引用傳遞。很多人都會(huì)認(rèn)為js里面有兩種傳值方式,一種是復(fù)制,另一種是數(shù)組、對(duì)象等按引用傳遞,后來(lái)看到知乎上面一道題后才發(fā)現(xiàn)不是那么簡(jiǎn)單。我個(gè)人理解就是,j...
摘要:按引用傳遞時(shí),函數(shù)的形參接收實(shí)參的隱式引用,而不再是副本。探究值的傳遞方式的基本類型,是按值傳遞的。但這樣是否說(shuō)明的對(duì)象是按引用傳遞的呢我們?cè)倏聪旅娴睦尤匀皇遣⑽幢恍薷臑槿绻前匆脗鬟f,修改形參的值,應(yīng)該影響到實(shí)參才對(duì)。 最近遇到個(gè)有趣的問(wèn)題:JS中的值是按值傳遞,還是按引用傳遞呢? 在分析這個(gè)問(wèn)題之前,我們需了解什么是按值傳遞(call by value),什么是按引用傳遞(ca...
這幾天遇到j(luò)s參數(shù)傳遞方式的問(wèn)題,深切探究一番,將所得結(jié)果總結(jié)于此 常見的幾種傳遞方式 傳值調(diào)用(call by value) 在傳值調(diào)用中實(shí)際參數(shù)被求值,其值被綁定到函數(shù)中對(duì)應(yīng)的變量上(通常是把值復(fù)制到新內(nèi)存區(qū)域)。在函數(shù)返回后調(diào)用者作用域里的曾傳給函數(shù)的任何東西都不會(huì)變。 傳引用調(diào)用(call by reference) 在傳引用調(diào)用求值中,傳遞給函數(shù)的是它的實(shí)際參數(shù)的隱式引用(即實(shí)際參數(shù)的地...
閱讀 3190·2021-11-10 11:35
閱讀 1295·2019-08-30 13:20
閱讀 1117·2019-08-29 16:18
閱讀 2131·2019-08-26 13:54
閱讀 2155·2019-08-26 13:50
閱讀 955·2019-08-26 13:39
閱讀 2473·2019-08-26 12:08
閱讀 1951·2019-08-26 10:37