摘要:之前看高級程序設計時就遇到過一個問題,就是函數傳參的問題,書上說是按值傳遞,而非按引用傳遞。我個人理解就是,中全部是按值傳遞。
之前看《javascript高級程序設計》時就遇到過一個問題,就是函數傳參的問題,書上說是按值傳遞,而非按引用傳遞。很多人都會認為js里面有兩種傳值方式,一種是復制,另一種是數組、對象等按引用傳遞,后來看到知乎上面一道題后才發現不是那么簡單。我個人理解就是,js中全部是按值傳遞。
這個是高級程序設計里面的例子:
也許很多人會迷惑,person.name不該是Greg嗎?為什么輸出Nicholas?
因為setName函數里面其實相當于把person對象的地址復制了一份,然后賦值給了obj,但是obj=new Object()這句將另外一個地址賦值給了obj,所以下面obj不管怎么修改都不會影響person。
這里還有另外一個例子:
var a=[1,2,3]; var b=a; a=[1,2,3,4]; console.log(b); //1,2,3
按照正常的想法,a和b是引用的同一個數組對象,當a改變的時候,b也會改變,可是這里面b卻沒有改變,難道這個是單純的復制a的值給b?
這個和上面的例子差不多,也是把a指向對象的地址復制給了b,然后a=[4,5,6]相當于a指向了另外一個數組,所以b還指向原來的數組,并不會發生變化。
這里還有一個例子:
var a=[1,2,3]; var b=a; a.push(4); console.log(b); //[1,2,3,4]
這里面因為a改變的還是原來數組,所以b也會跟著變化。
最后奉上一道自己筆試做錯的題。
var test1=new Boolean("false"); console.log(test1); //true
注意:如果邏輯對象無初始值或者其值為 0、-0、null、""、false、undefined 或者 NaN,那么對象的值為 false。否則,其值為 true(即使當自變量為字符串 "false" 時)!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/111510.html
摘要:中所有函數的參數都是按值傳遞的。基本類型本身是按值傳遞,具有不可變性,對基本類型的修改,實質上都是在棧內存中創建了新的值。中把這種拷貝也認為是按值傳遞。 本文共 1200 字,讀完只需 5 分鐘 概述 參數的傳遞分為按值傳遞和按引用傳遞,而 JavaScript 中參數的傳遞只有按值傳遞。 ECMAScript 中所有函數的參數都是按值傳遞的。 所謂按值傳遞就是: 把函數外部的值復制給...
摘要:之前看高級程序設計時就遇到過一個問題,就是函數傳參的問題,書上說是按值傳遞,而非按引用傳遞。我個人理解就是,中全部是按值傳遞。 之前看《javascript高級程序設計》時就遇到過一個問題,就是函數傳參的問題,書上說是按值傳遞,而非按引用傳遞。很多人都會認為js里面有兩種傳值方式,一種是復制,另一種是數組、對象等按引用傳遞,后來看到知乎上面一道題后才發現不是那么簡單。我個人理解就是,j...
摘要:按引用傳遞時,函數的形參接收實參的隱式引用,而不再是副本。探究值的傳遞方式的基本類型,是按值傳遞的。但這樣是否說明的對象是按引用傳遞的呢我們再看下面的例子仍然是并未被修改為如果是按引用傳遞,修改形參的值,應該影響到實參才對。 最近遇到個有趣的問題:JS中的值是按值傳遞,還是按引用傳遞呢? 在分析這個問題之前,我們需了解什么是按值傳遞(call by value),什么是按引用傳遞(ca...
這幾天遇到js參數傳遞方式的問題,深切探究一番,將所得結果總結于此 常見的幾種傳遞方式 傳值調用(call by value) 在傳值調用中實際參數被求值,其值被綁定到函數中對應的變量上(通常是把值復制到新內存區域)。在函數返回后調用者作用域里的曾傳給函數的任何東西都不會變。 傳引用調用(call by reference) 在傳引用調用求值中,傳遞給函數的是它的實際參數的隱式引用(即實際參數的地...
閱讀 1907·2021-09-23 11:21
閱讀 1693·2019-08-29 17:27
閱讀 1053·2019-08-29 17:03
閱讀 718·2019-08-29 15:07
閱讀 1915·2019-08-29 11:13
閱讀 2373·2019-08-26 12:14
閱讀 904·2019-08-26 11:52
閱讀 1729·2019-08-23 17:09