成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript參數(shù)傳遞方式

jcc / 767人閱讀

這幾天遇到j(luò)s參數(shù)傳遞方式的問題,深切探究一番,將所得結(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ù)的地址)而不是實(shí)參的拷貝。通常函數(shù)能夠修改這些參數(shù)(比如賦值),而且改變對(duì)于調(diào)用者是可見的。
傳共享對(duì)象調(diào)用(call by sharing)
在傳共享對(duì)象調(diào)用中,傳遞給函數(shù)的是實(shí)參所指向引用對(duì)象的地址,而不是實(shí)參的地址,即傳遞共享對(duì)象。故在函數(shù)中修改引用對(duì)象時(shí),實(shí)參的值也會(huì)跟著變化,而如果是重新給新參賦值后,再進(jìn)行任何修改都不會(huì)影響到外面的實(shí)參了。
JS中的傳值方式 Number--傳值調(diào)用
let a = 1;
function add(val) {
  val += 1;
  console.log(`val=${val}`); // 2
}

add(a);
console.log(`a=${a}`); // 1
String--傳值調(diào)用
let a = "hahaha";
function change(val) {
  val = "heiheihei";
  console.log(`val=${val}`); // heiheihei
}

change(a);
console.log(`a=${a}`); // hahaha
Boolean--傳值調(diào)用 Symbol--傳值調(diào)用
let a = Symbol("prop");
function change(val) {
  val = Symbol(2);
  console.log(`val=${val.toString()}`); // Symbol(2)
}

change(a);
console.log(`a=${a.toString()}`); // Symbol(prop)
null--傳值調(diào)用 undefined--傳值調(diào)用 Object--傳共享對(duì)象調(diào)用
let obj = {
    a: 1
}
function change(obj) {
    obj.a = 2;
    console.log(obj); // {a: 2}
    obj = {
        a: 3
    }
    console.log(obj); // {a: 3}
}

change(obj);
console.log(obj); // {a: 2}

從上面的代碼可以看出,在函數(shù)中對(duì)參數(shù)所指向的對(duì)象進(jìn)行修改時(shí)會(huì)影響到外面的實(shí)參,但對(duì)函數(shù)參數(shù)重新賦值時(shí),不會(huì)影響到實(shí)參,故js引用類型的傳值方式為call by sharing

深入探究 變量存儲(chǔ)方式

C#中類型有兩種:值類型和引用類型,它們之間的卻別在于實(shí)際數(shù)據(jù)存儲(chǔ)的位置(如上圖)。值類型的變量和實(shí)際數(shù)據(jù)都存儲(chǔ)在堆棧中;而引用類型則只有變量存儲(chǔ)在堆棧中,變量存儲(chǔ)著實(shí)際數(shù)據(jù)的地址,實(shí)際數(shù)據(jù)存儲(chǔ)在與地址相對(duì)應(yīng)的托管堆中。

C#中的值傳遞

正常情況下,值類型按值傳遞

正常情況下,應(yīng)用類型按共享對(duì)象的方式傳遞(call by sharing),但string類型除外(由于string的不可變性,它是按值傳遞的)

通過使用ref或out關(guān)鍵字,值類型和引用類型都可以按引用傳遞

總結(jié)

綜上所述(證明題2333),值傳遞和引用傳遞的參數(shù)類型既可以是值類型又可以是引用類型,但是call by sharing的參數(shù)類型只能是引用類型。

個(gè)人理解:JS中,null賦值的變量時(shí)對(duì)象,但是,變量指向的引用地址為空,故在函數(shù)中修改參數(shù)的值,對(duì)實(shí)參不會(huì)又任何影響,所以是按值傳遞。string類型應(yīng)該跟C#按值傳遞的原因一致。

參考:
維基百科
JS中的值是按值傳遞,還是按引用傳遞呢
《Learning hard C#學(xué)習(xí)筆記》第10章

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108413.html

相關(guān)文章

  • JavaScript深入之參數(shù)按值傳遞

    摘要:深入系列第九篇,除了按值傳遞引用傳遞,還有第三種傳遞方式按共享傳遞定義在高級(jí)程序設(shè)計(jì)第三版,講到傳遞參數(shù)中所有函數(shù)的參數(shù)都是按值傳遞的。 JavaScript深入系列第九篇,除了按值傳遞、引用傳遞,還有第三種傳遞方式 —— 按共享傳遞 定義 在《JavaScript高級(jí)程序設(shè)計(jì)》第三版 4.1.3,講到傳遞參數(shù): ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的。 什么是按值傳遞呢?...

    DataPipeline 評(píng)論0 收藏0
  • 圖解JavaScript參數(shù)傳遞

    摘要:寫在最前本次嘗試通過流程圖的形式并結(jié)合兩個(gè)例子來重新理解一下中的參數(shù)傳遞。歡迎關(guān)注我的博客,不定期更新中參數(shù)到底如何傳遞借用紅寶書的一句話中所有函數(shù)的參數(shù)都是按值傳遞的這個(gè)值如果是簡單類型,那么就是其本身。同時(shí)執(zhí)行第一個(gè)結(jié)果即為。 寫在最前 本次嘗試通過流程圖的形式并結(jié)合兩個(gè)例子來重新理解一下JavaScript中的參數(shù)傳遞。 歡迎關(guān)注我的博客,不定期更新中—— 參數(shù)到底如何傳遞? 借...

    Berwin 評(píng)論0 收藏0
  • JavaScript函數(shù)式編程(0):函數(shù)基礎(chǔ) arguments、this、apply()、cal

    摘要:參數(shù)引用函數(shù)的上下文,函數(shù)上下文來自于等面向?qū)ο笳Z言,中的依賴于函數(shù)聲明。沒有重載函數(shù)沒有簽名,因?yàn)槠鋮?shù)是由包含零或多個(gè)值的數(shù)組來表示的。這就是重載函數(shù)。重載函數(shù)常用來實(shí)現(xiàn)功能類似而所處理的數(shù)據(jù)類型不同的問題。 1 函數(shù)參數(shù) 函數(shù)的實(shí)參和形參個(gè)數(shù)可以不等,之所以會(huì)這樣,原因是 ECMAScript 中的參數(shù)在內(nèi)部是用一個(gè)數(shù)組來表示的。函數(shù)接收到的始終都是這個(gè)數(shù)組,而不關(guān)心數(shù)組中包含哪...

    陳偉 評(píng)論0 收藏0
  • JavaScript函數(shù)式編程(0):函數(shù)基礎(chǔ) arguments、this、apply()、cal

    摘要:參數(shù)引用函數(shù)的上下文,函數(shù)上下文來自于等面向?qū)ο笳Z言,中的依賴于函數(shù)聲明。沒有重載函數(shù)沒有簽名,因?yàn)槠鋮?shù)是由包含零或多個(gè)值的數(shù)組來表示的。這就是重載函數(shù)。重載函數(shù)常用來實(shí)現(xiàn)功能類似而所處理的數(shù)據(jù)類型不同的問題。 1 函數(shù)參數(shù) 函數(shù)的實(shí)參和形參個(gè)數(shù)可以不等,之所以會(huì)這樣,原因是 ECMAScript 中的參數(shù)在內(nèi)部是用一個(gè)數(shù)組來表示的。函數(shù)接收到的始終都是這個(gè)數(shù)組,而不關(guān)心數(shù)組中包含哪...

    liuchengxu 評(píng)論0 收藏0
  • 混合應(yīng)用中的javascript實(shí)踐

    摘要:混合應(yīng)用在幾年前便進(jìn)入大眾視野,近來更是越發(fā)風(fēng)生水起,深受人民群眾的喜愛。混合方式如同茴字有幾種寫法一般,構(gòu)建混合應(yīng)用也有不同的方式。機(jī)型則會(huì)比較悲劇,使用方案或許是個(gè)正確的選擇。所以在開發(fā)中一定要做好可用性檢測(cè),減少出現(xiàn)的幾率。 混合應(yīng)用(hybird app) 在幾年前便進(jìn)入大眾視野,近來更是越發(fā)風(fēng)生水起,深受人民群眾的喜愛。 概念 什么是混合應(yīng)用 混合應(yīng)用(hybird app)...

    Flink_China 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<