亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS中函數(shù)參數(shù)值傳遞和引用傳遞

ZHAO_ / 2243人閱讀

摘要:學習中函數(shù)參數(shù)值傳遞和引用傳遞的學習中函數(shù)參數(shù)值傳遞和引用傳遞在紅寶書中說到,中所有函數(shù)的參數(shù)都是按值傳遞的。

學習JS中函數(shù)參數(shù)值傳遞和引用傳遞的學習 JS中函數(shù)參數(shù)值傳遞和引用傳遞

在JavaScript紅寶書中說到,“ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的”。理解這個概念先要從JS的堆內(nèi)存和棧內(nèi)存說起:棧內(nèi)存為自動分配的內(nèi)存空間,它由系統(tǒng)自動釋放;堆內(nèi)存則是動態(tài)分配的內(nèi)存,大小不定也不會自動釋放。(很初級的理解,有錯誤還望指正)

JS中的5種基本數(shù)據(jù)類型Undefined、Null、Boolean、Number 和 String,它們是直接按值存放在棧內(nèi)存中,可以直接訪問。引用類型的值是保存在堆內(nèi)存中的對象。與其他語言不同,JavaScript不允許直接訪問堆內(nèi)存中的位置, 也就是說不能直接操作堆內(nèi)存中的對象。 在操作對象時, 實際上是在操作對象的引用(也可理解為指針)而不是實際的對象?!?這個堆內(nèi)存中對象的引用(指針)存儲在棧內(nèi)存中。你只能操作棧內(nèi)存中的數(shù)據(jù)。即基礎(chǔ)類型數(shù)據(jù)和堆內(nèi)存中對象的指針兩大類

對于基本數(shù)據(jù)類型的復制就相當于你和小明買了一輛一樣的單車,你對自己單車的操作不會影響到小明的單車。
而對于引用類型的復制,相當于你和小明共用一個客廳,你對這個客廳做的操作是會影響到小明的客廳(即你們共用的客廳)

如下圖:

 //測試代碼:
    //基本類型:
    var a = 10;
    var b = a;
    b = 12;
    alert(a);//10
    alert(b);//12
    
    //引用類型:
    var a = new Object();
    a.name = "Tony";
    alert(a.name);//"Tony"
    var b = a;
    b.name = "Tom"
    alert(a.name);//"Tom"
參數(shù)的傳遞

繼續(xù)說參數(shù)的傳遞,無論參數(shù)是什么類型,都是按值傳遞的,普通類型傳遞的是本身的值,引用類型傳遞的是自己在棧內(nèi)存中的“指針”值。

function setName(obj) {
    obj.name = "Nicholas";
}
var person = new Object();
setName(person); 
alert(person.name);   // "Nicholas"

實際過程如下圖

...]

//而有一個容易引起誤導的點在于下面這個變化
function setName(obj) {
obj.name = "Nicholas";
obj = new Object(); //改變obj的指向,此時obj指向一個新的內(nèi)存地址,不再和person指向同一個
obj.name = "Greg";
}
var person = new Object();
setName(person);  
alert(person.name);  //"Nicholas"
//這里只要理解,你不能直接操作堆內(nèi)存中的對象,你只能通過棧內(nèi)存中的指針進行操作。

這個函數(shù)的過程如下圖:

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88871.html

相關(guān)文章

  • JavaScript參數(shù)傳遞方式

    這幾天遇到j(luò)s參數(shù)傳遞方式的問題,深切探究一番,將所得結(jié)果總結(jié)于此 常見的幾種傳遞方式 傳值調(diào)用(call by value) 在傳值調(diào)用中實際參數(shù)被求值,其值被綁定到函數(shù)中對應的變量上(通常是把值復制到新內(nèi)存區(qū)域)。在函數(shù)返回后調(diào)用者作用域里的曾傳給函數(shù)的任何東西都不會變。 傳引用調(diào)用(call by reference) 在傳引用調(diào)用求值中,傳遞給函數(shù)的是它的實際參數(shù)的隱式引用(即實際參數(shù)的地...

    jcc 評論0 收藏0
  • JavaScript之按傳遞

    摘要:中所有函數(shù)的參數(shù)都是按值傳遞的?;绢愋捅旧硎前粗祩鬟f,具有不可變性,對基本類型的修改,實質(zhì)上都是在棧內(nèi)存中創(chuàng)建了新的值。中把這種拷貝也認為是按值傳遞。 本文共 1200 字,讀完只需 5 分鐘 概述 參數(shù)的傳遞分為按值傳遞和按引用傳遞,而 JavaScript 中參數(shù)的傳遞只有按值傳遞。 ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的。 所謂按值傳遞就是: 把函數(shù)外部的值復制給...

    xiangchaobin 評論0 收藏0
  • js 函數(shù)、參數(shù)傳遞、引用類型與基本類型

    摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數(shù)傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量即命名參數(shù)。結(jié)果依舊是在調(diào)用函數(shù)初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。 函數(shù) 參數(shù) 1.js函數(shù)不介意傳遞進來多少個參數(shù),也不在乎傳遞進來參數(shù)是什么類型。2.arguments對象:類數(shù)組 arguments對象的長度是由傳入的參數(shù)個數(shù)決定的,...

    Lavender 評論0 收藏0
  • js 函數(shù)、參數(shù)傳遞引用類型與基本類型

    摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數(shù)傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量即命名參數(shù)。結(jié)果依舊是在調(diào)用函數(shù)初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。 函數(shù) 參數(shù) 1.js函數(shù)不介意傳遞進來多少個參數(shù),也不在乎傳遞進來參數(shù)是什么類型。2.arguments對象:類數(shù)組 arguments對象的長度是由傳入的參數(shù)個數(shù)決定的,...

    Bowman_han 評論0 收藏0
  • JavaScript 是如何工作的:JavaScript 的共享傳遞傳遞

    摘要:它對數(shù)組和對象使用按值傳遞,但這是在的共享傳參或拷貝的引用中使用的按值傳參。例如在這里,變量和值在執(zhí)行期間存儲在堆棧中。返回值這是可選的,函數(shù)可以返回值,也可以不返回值。變量被推入堆棧,從而在執(zhí)行時成為的副本。 這是專門探索 JavaScript 及其所構(gòu)建的組件的系列文章的第 22 篇。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 如果你錯過了前面的章節(jié),可...

    keithyau 評論0 收藏0

發(fā)表評論

0條評論

ZHAO_

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<