摘要:對象值傳遞與引用傳遞數(shù)據(jù)類型與數(shù)據(jù)結(jié)構(gòu)我們需要先回憶一下。值傳遞與引用傳遞通過上述的理解要明白中值傳遞與引用傳遞就太簡單了,下面的兩個超級簡單的可以詮釋一切。
title: JS對象(2)值傳遞與引用傳遞
date: 2016-10-05
tags: JavaScript
我們需要先回憶一下。
JavaScript 是一種弱類型或者說動態(tài)語言。這意味著你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定。
此外,最新的 ECMAScript 標準定義了7中數(shù)據(jù)類型:
6種 原始類型: Boolean, Null, Undefined, Number, Stirng, Symbol
一種復(fù)雜類型(引用類型)對象: Object.
0x02 值傳遞與引用傳遞JavaScript 一切皆對象(除了6中原始類型)
在 JS 中,所有除 Object 以為的類型都是不可變的。比如,JS 中字符串是不可變的,任何對字符串的操作一定返回了一個新字符串,原始字符串并沒有被改變。
通過上述的理解要明白 Javascript 中值傳遞與引用傳遞就太簡單了,下面的兩個超級簡單的 demo 可以詮釋一切。
// 值傳遞 var a = 2; function foo(b){ b +=10; } foo(a) console.log(a) // 2 // 原始 a 的值沒有發(fā)生改變
值傳遞:
只將值進行傳遞,與原變量無關(guān),值會被復(fù)制一份,保存在內(nèi)存中另一個不同的位置。
當(dāng)我們修改傳遞后的值時,修改的是內(nèi)存中新的位置,而原變量不會被影響,還是原來的值。
這種情況往往出現(xiàn)在6中原始類型中。
//引用傳遞 var a = [2]; function foo(b){ b.push(10) } foo(a) console.log(a) // [2, 10] // 原始 a 的值被改變了
引用傳遞:
將內(nèi)存地址進行傳遞,相當(dāng)于把原變量完整的傳遞過來。
當(dāng)我們修改傳遞后的值時,修改的是內(nèi)存中原來的位置,會對原變量造成影響。
這種情況往往出現(xiàn)在對象上。
利用引用傳遞的特性,我們有了實現(xiàn)面向?qū)ο蟮幕A(chǔ)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86517.html
摘要:按引用傳遞時,函數(shù)的形參接收實參的隱式引用,而不再是副本。探究值的傳遞方式的基本類型,是按值傳遞的。但這樣是否說明的對象是按引用傳遞的呢我們再看下面的例子仍然是并未被修改為如果是按引用傳遞,修改形參的值,應(yīng)該影響到實參才對。 最近遇到個有趣的問題:JS中的值是按值傳遞,還是按引用傳遞呢? 在分析這個問題之前,我們需了解什么是按值傳遞(call by value),什么是按引用傳遞(ca...
摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數(shù)傳遞基本類型的值時,被傳遞的值會被復(fù)制給一個局部變量即命名參數(shù)。結(jié)果依舊是在調(diào)用函數(shù)初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。 函數(shù) 參數(shù) 1.js函數(shù)不介意傳遞進來多少個參數(shù),也不在乎傳遞進來參數(shù)是什么類型。2.arguments對象:類數(shù)組 arguments對象的長度是由傳入的參數(shù)個數(shù)決定的,...
摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數(shù)傳遞基本類型的值時,被傳遞的值會被復(fù)制給一個局部變量即命名參數(shù)。結(jié)果依舊是在調(diào)用函數(shù)初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。 函數(shù) 參數(shù) 1.js函數(shù)不介意傳遞進來多少個參數(shù),也不在乎傳遞進來參數(shù)是什么類型。2.arguments對象:類數(shù)組 arguments對象的長度是由傳入的參數(shù)個數(shù)決定的,...
摘要:它對數(shù)組和對象使用按值傳遞,但這是在的共享傳參或拷貝的引用中使用的按值傳參。例如在這里,變量和值在執(zhí)行期間存儲在堆棧中。返回值這是可選的,函數(shù)可以返回值,也可以不返回值。變量被推入堆棧,從而在執(zhí)行時成為的副本。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 22 篇。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯過了前面的章節(jié),可...
摘要:它對數(shù)組和對象使用按值傳遞,但這是在的共享傳參或拷貝的引用中使用的按值傳參。例如在這里,變量和值在執(zhí)行期間存儲在堆棧中。返回值這是可選的,函數(shù)可以返回值,也可以不返回值。變量被推入堆棧,從而在執(zhí)行時成為的副本。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 22 篇。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯過了前面的章節(jié),可...
閱讀 1657·2021-09-22 15:21
閱讀 2874·2021-09-09 09:32
閱讀 2705·2021-09-02 09:52
閱讀 3317·2019-08-30 14:02
閱讀 2232·2019-08-26 13:25
閱讀 1464·2019-08-26 13:24
閱讀 1615·2019-08-26 10:31
閱讀 1566·2019-08-26 10:16