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

資訊專欄INFORMATION COLUMN

js函數(shù)中參數(shù)的傳遞

rubyshen / 1346人閱讀

摘要:前言今天再看純函數(shù)的時候看到純函數(shù)過程沒有副作用就是說在純函數(shù)中我們不能改變外部狀態(tài)想到了以前看過的函數(shù)中傳參的概念數(shù)據(jù)類型在中數(shù)據(jù)類型分為兩類基本類型值和引用類型值變量的復(fù)制中變量的基本類型和引用類型保存方式是不同的這也就導(dǎo)致變量復(fù)制時也

前言

今天再看React純函數(shù)的時候,看到純函數(shù)過程沒有副作用,就是說在純函數(shù)中我們不能改變外部狀態(tài).
想到了以前看過的函數(shù)中傳參的概念.

數(shù)據(jù)類型

在js中,數(shù)據(jù)類型分為兩類:基本類型值(undefined,null,Boolean,Number,String)和引用類型值(Object,Arrat,Function).

變量的復(fù)制

1.js中變量的基本類型和引用類型保存方式是不同的,這也就導(dǎo)致變量復(fù)制時也就不同了.
如果從一個變量向另一個變量復(fù)制基本類型的值時,會將前者的值克隆一個,然后將克隆的值
賦值到后者,因此這兩個值是完全獨(dú)立的,只是他們的value相同而已.

var num1 = 10;
var num2 = num1;
console.log(num1); // 10
num2 += 1;
console.log(num1);  // 10
console.log(num2);  // 11

2.引用類型的復(fù)制
引用類型復(fù)制對象時并不會在堆內(nèi)存中新生成一個一模一樣的對象,只是多了一個保存指向這個對象指針的變量罷了.
將obj1的值復(fù)制給obj2,而這個值的副本實(shí)際上是一個指針,這個指針指向存儲在堆中的一個對象,
也就是說創(chuàng)建了一個新的內(nèi)存地址傳給了obj2,obj1和obj2兩個變量同時指向了同一個Object,當(dāng)去改變這個對象,
他們的值都會改變,也即是說他們中任何一個做出的改變都會反映到另一個身上.

var obj1 = {
    a: 1
};
var obj2 = obj1;
console.log(obj2);  // {a: 1}
obj2.a = 10;
console.log(obj1);  // {a: 10}
console.log(obj2);  // {a: 10}
函數(shù)參數(shù)的傳遞

所有函數(shù)的參數(shù)都是按值傳遞的,也就是說把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個變量復(fù)制
到另一個變量一樣.所以如果能理解變量的復(fù)制,那么參數(shù)的傳遞也就很簡單了.
1.基本類型傳參

var count = 10;
function num(num1) {
    num1 = 1;
    return num1;
}
var count1 = num(count);
console.log(count1); // 1
console.log(count); //10

2.引用類型傳參

var o = {
    a: 1
};
function fun(o) {
    o.a = 10;
    return o;
}
var p = fun(o);
console.log(o); // {a: 10}
console.log(p); // {a: 10}

3.引用類型傳參指針改變
在函數(shù)中重新定義了一個對象,也就是現(xiàn)在堆內(nèi)存中有兩個對象,外部的oo指向的是老的對象,被傳入?yún)?shù)后
指向的是新定義的對象,所以調(diào)用后返回的值是新定義的對象的值.
如果參數(shù)是按引用傳遞的,那么oo也是a:10,從這點(diǎn)可以看出參數(shù)是按值傳遞的.

var oo = {
    a: 1
};
function gun(o) {
    o = {
        a: 10
    };
    return o;
}
var pp = gun(oo);
console.log(oo);    // {a: 1}
console.log(pp);    // {a: 10}
總結(jié)

函數(shù)的參數(shù)是值傳遞,對象類型作為參數(shù)的時候傳遞的是地址(指針)的值,而不是對象本身堆內(nèi)存中的value.
所以這種場景,函數(shù)內(nèi)部用參數(shù)去修改對象,那么查找到的還是原對象,因為指向相同,所以修改的話原對象
也受影響.
如果實(shí)例化一個對象賦值給該指針,那么指針指向的是一個全新的對象了,和原來指向的對象失去聯(lián)系.

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

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

相關(guān)文章

  • js函數(shù)參數(shù)、作用域、匿名函數(shù)總結(jié)

    摘要:在向參數(shù)傳遞引用類型的值時,會把這個值在內(nèi)存中的地址復(fù)制給一個局部變量,因此這個局部變量的變化會反映在函數(shù)的外部。當(dāng)在函數(shù)內(nèi)部重寫時,這個變量的引用就是一個局部變量了,這個局部變量在函數(shù)執(zhí)行完畢后立即銷毀。 前言:我入門學(xué)的 java這種強(qiáng)類型語言,剛開始學(xué)js第一感覺是挺簡單,后來發(fā)現(xiàn)還是too young。所以,本次就把作用域、匿名函數(shù)做一個完整總結(jié),黑喂狗~~~ --------...

    BakerJ 評論0 收藏0
  • JS函數(shù)參數(shù)傳遞和引用傳遞

    摘要:學(xué)習(xí)中函數(shù)參數(shù)值傳遞和引用傳遞的學(xué)習(xí)中函數(shù)參數(shù)值傳遞和引用傳遞在紅寶書中說到,中所有函數(shù)的參數(shù)都是按值傳遞的。 學(xué)習(xí)JS中函數(shù)參數(shù)值傳遞和引用傳遞的學(xué)習(xí) JS中函數(shù)參數(shù)值傳遞和引用傳遞 在JavaScript紅寶書中說到,ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的。理解這個概念先要從JS的堆內(nèi)存和棧內(nèi)存說起:棧內(nèi)存為自動分配的內(nèi)存空間,它由系統(tǒng)自動釋放;堆內(nèi)存則是動態(tài)分配的內(nèi)存...

    ZHAO_ 評論0 收藏0
  • JavaScript求值策略

    摘要:關(guān)于的求值策略,問中函數(shù)的參數(shù)傳遞是按值傳遞還是按引用傳遞回答很經(jīng)典。所以不能說中函數(shù)的參數(shù)傳遞嚴(yán)格按值傳遞或按引入傳遞。中還采用一種參數(shù)傳遞策略,叫按共享傳遞。中參數(shù)是必須先求值再作為實(shí)參傳入函數(shù)的。參考求值策略中函數(shù)參數(shù)的默認(rèn)值 最近在研究 lambda 演算中的 η-變換 在 JavaScript 中的應(yīng)用,偶然在 stackoverflow 上看到一個比較有意思的問題。關(guān)于 J...

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

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

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

    摘要:基本類型和引用類型用操作符定義的變量將成為作用域中的局部變量。在向參數(shù)傳遞基本類型的值時,被傳遞的值會被復(fù)制給一個局部變量即命名參數(shù)。結(jié)果依舊是在調(diào)用函數(shù)初時,與引用的是同一對象,所以首次的屬性賦值會對有所影響。 函數(shù) 參數(shù) 1.js函數(shù)不介意傳遞進(jìn)來多少個參數(shù),也不在乎傳遞進(jìn)來參數(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條評論

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