国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript參數(shù)傳遞方式

jcc / 763人閱讀

這幾天遇到j(luò)s參數(shù)傳遞方式的問題,深切探究一番,將所得結(jié)果總結(jié)于此

常見的幾種傳遞方式 傳值調(diào)用(call by value)

</>復(fù)制代碼

  1. 在傳值調(diào)用中實際參數(shù)被求值,其值被綁定到函數(shù)中對應(yīng)的變量上(通常是把值復(fù)制到新內(nèi)存區(qū)域)。在函數(shù)返回后調(diào)用者作用域里的曾傳給函數(shù)的任何東西都不會變。
傳引用調(diào)用(call by reference)

</>復(fù)制代碼

  1. 在“傳引用調(diào)用”求值中,傳遞給函數(shù)的是它的實際參數(shù)的隱式引用(即實際參數(shù)的地址)而不是實參的拷貝。通常函數(shù)能夠修改這些參數(shù)(比如賦值),而且改變對于調(diào)用者是可見的。
傳共享對象調(diào)用(call by sharing)

</>復(fù)制代碼

  1. 在傳共享對象調(diào)用中,傳遞給函數(shù)的是實參所指向引用對象的地址,而不是實參的地址,即傳遞共享對象。故在函數(shù)中修改引用對象時,實參的值也會跟著變化,而如果是重新給新參賦值后,再進行任何修改都不會影響到外面的實參了。
JS中的傳值方式 Number--傳值調(diào)用

</>復(fù)制代碼

  1. let a = 1;
  2. function add(val) {
  3. val += 1;
  4. console.log(`val=${val}`); // 2
  5. }
  6. add(a);
  7. console.log(`a=${a}`); // 1
String--傳值調(diào)用

</>復(fù)制代碼

  1. let a = "hahaha";
  2. function change(val) {
  3. val = "heiheihei";
  4. console.log(`val=${val}`); // heiheihei
  5. }
  6. change(a);
  7. console.log(`a=${a}`); // hahaha
Boolean--傳值調(diào)用 Symbol--傳值調(diào)用

</>復(fù)制代碼

  1. let a = Symbol("prop");
  2. function change(val) {
  3. val = Symbol(2);
  4. console.log(`val=${val.toString()}`); // Symbol(2)
  5. }
  6. change(a);
  7. console.log(`a=${a.toString()}`); // Symbol(prop)
null--傳值調(diào)用 undefined--傳值調(diào)用 Object--傳共享對象調(diào)用

</>復(fù)制代碼

  1. let obj = {
  2. a: 1
  3. }
  4. function change(obj) {
  5. obj.a = 2;
  6. console.log(obj); // {a: 2}
  7. obj = {
  8. a: 3
  9. }
  10. console.log(obj); // {a: 3}
  11. }
  12. change(obj);
  13. console.log(obj); // {a: 2}

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

深入探究 變量存儲方式

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

C#中的值傳遞

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

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

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

總結(jié)

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

</>復(fù)制代碼

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

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

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108413.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    Flink_China 評論0 收藏0

發(fā)表評論

0條評論

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