最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript 函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef) 分享

 更新時間:2013年07月02日 15:08:08   作者:  
這篇文章主要介紹了在JS中函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef)的誤區(qū)我們通過實例說明一下,有需要的朋友可以參考

對于“JavaScript 函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef)”這個問題,普遍存在一個誤區(qū):number,string等“簡單類型”是傳值,Number, String, Object, Array等“復(fù)雜類型”是傳址。
這樣不對嗎?為什么會有這樣的誤區(qū)?看一下這兩段代碼:

復(fù)制代碼 代碼如下:

//造成傳值假象的代碼
function modifyLikeByVal(x){
  x = 1;
  console.log('x = %d', x);
}
var x = 0;
console.log('x = %d', x); // 輸出 x = 0
modifyLikeByVal(x);  // 輸出 x = 1
console.log('x = %d', x); // 輸出 x = 0   x沒變!

復(fù)制代碼 代碼如下:

//造成傳址假象的代碼
function modifyLikeByRef(x){
  x[0] = 4;
  x[1] = 5;
  x[2] = 6;
  console.log('x = [ %s ]', x.join(', '));
}
var x = [1, 2, 3];
console.log('x = [ %s ]', x.join(', ')); // 輸出 x = [ 1, 2, 3 ]
modifyLikeByRef(x);  // 輸出 x = [ 4, 5, 6 ]
console.log('x = [ %s ]', x.join(', ')); // 輸出 x = [ 4, 5, 6 ]   x變了!

于是,由以上代碼得出結(jié)論,“簡單類型”作為參數(shù)是傳值(byVal)的,“復(fù)雜類型”作為參數(shù)是傳址(byRef)的。

問題出在哪呢?

仔細觀察兩個函數(shù),就可以發(fā)現(xiàn)一點:
在byVal中,是直接修改了參數(shù)x: x = 1;
而byRef中,是修改參數(shù)x的成員: x[0] = 4; x[1] = 5; x[2] = 6;

本人由此得出猜想:在JavaScript中,所有的變量或成員,都是一個指針,在修改變量或成員值的時候,其實是修改了該指針的地址。

這樣上面的代碼就可以得到解釋了:

在“byVal”中:

復(fù)制代碼 代碼如下:

global {  // 表示全局作用域,下面的表示函數(shù)作用域
  var x = 0;  // 初始化指針x并指向數(shù)字0
    fun(x) {
      x = global.x; // 傳入?yún)?shù)global.x; fun域的x指針地址與global域的x指針地址一樣指向數(shù)字0
      x = 1; // 修改fun域的x指針地址,指向數(shù)字1;
    } // fun 域結(jié)束,global域中的x指針沒改變
}

在“byRef”中:
復(fù)制代碼 代碼如下:

global {  // 表示全局作用域,下面的表示函數(shù)作用域
  /*
    初始化指針x并指向數(shù)組[1, 2, 3]
    其實是x的三個成員0, 1, 2,分別指向1, 2, 3;
  */
  var x = [1, 2, 3]; 
    fun(x) {
      x = global.x; // 傳入?yún)?shù)global.x; fun域的x指針地址與global域的x指針地址一樣指向數(shù)組[1, 2, 3]
      /*
       在fun域中的x沒有再被改變
       緊接著修改fun域中的x(也就是global.x)三個成員指針的指向
      */
      x[0] = 4;
      x[1] = 5;
      x[2] = 6;
    } // fun 域結(jié)束,global域中的x指針沒改變,但其三個成員指針被改變了,于是就看到我們輸出的結(jié)果
}

那這段代碼怎么解釋呢???
復(fù)制代碼 代碼如下:

(function(a, b){
    arguments[0] = 1;
    b = 2;
    console.log(arguments, a, b);
})(-1, -2);

只能說a, b...,是arguments[0],...[n]的別名了。

如果有不對的地方,請指出來,謝謝。

如果有更好的解釋,歡迎大家分享。

相關(guān)文章

  • javascript權(quán)威指南 學(xué)習筆記之變量作用域分享

    javascript權(quán)威指南 學(xué)習筆記之變量作用域分享

    最近一直在看《javascript權(quán)威指南 第五版》,變量作用域這一章,看得真的有點累。不過,收獲還是多多。
    2011-09-09
  • Layui表格行內(nèi)動態(tài)編輯數(shù)據(jù)

    Layui表格行內(nèi)動態(tài)編輯數(shù)據(jù)

    本文主要介紹經(jīng)典前端框架 layui 中的動態(tài)表格數(shù)據(jù)操作,結(jié)合 JQuery 動態(tài)編輯單元格中的數(shù)據(jù),具有一定的參考價值,感興趣的可以了解一下
    2021-08-08
  • select標簽設(shè)置默認選中的選項方法

    select標簽設(shè)置默認選中的選項方法

    下面小編就為大家分享一篇select標簽設(shè)置默認選中的選項方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • JS加密插件CryptoJS實現(xiàn)的DES加密示例

    JS加密插件CryptoJS實現(xiàn)的DES加密示例

    這篇文章主要介紹了JS加密插件CryptoJS實現(xiàn)的DES加密,結(jié)合實例形式分析了javascript使用CryptoJS插件進行des加密的各種常見模式使用技巧,需要的朋友可以參考下
    2018-08-08
  • javascript中延遲加載的7種方法實現(xiàn)

    javascript中延遲加載的7種方法實現(xiàn)

    在web前端開發(fā)中,性能優(yōu)化一直是一個非常重要的話題,JavaScript中延遲加載的方式有很多種,本文就來介紹了javascript中延遲加載的7種方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • 原生js實現(xiàn)ajax請求和JSONP跨域請求操作示例

    原生js實現(xiàn)ajax請求和JSONP跨域請求操作示例

    這篇文章主要介紹了原生js實現(xiàn)ajax請求和JSONP跨域請求操作,結(jié)合實例形式分析了基于原生js實現(xiàn)的ajax請求和JSONP跨域請求相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2020-03-03
  • js實現(xiàn)多張圖片每隔一秒切換一張圖片

    js實現(xiàn)多張圖片每隔一秒切換一張圖片

    這篇文章主要為大家詳細介紹了js實現(xiàn)多張圖片每隔一秒切換一張圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 詳解js location.href和window.open的幾種用法和區(qū)別

    詳解js location.href和window.open的幾種用法和區(qū)別

    這篇文章主要介紹了詳解js location.href和window.open的幾種用法和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-12-12
  • 理解Javascript_01_理解內(nèi)存分配原理分析

    理解Javascript_01_理解內(nèi)存分配原理分析

    在正式開始之前,我想先說兩句,理解javascript系列博文是通過帶領(lǐng)大家分析javascript執(zhí)行時的內(nèi)存分配情況,來解釋javascript原理,具體會涵蓋javascript預(yù)加載,閉包原理,面象對象,執(zhí)行模型,對象模型...,文章的視角很特別,也非常深入,希望大家能接受這種形式,并提供寶貴意見。
    2010-10-10
  • 微信小程序自定義頂部導(dǎo)航欄并適配不同機型實例詳解

    微信小程序自定義頂部導(dǎo)航欄并適配不同機型實例詳解

    這篇文章主要為大家介紹了微信小程序開發(fā)自定義頂部導(dǎo)航欄并適配不同機型的實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12

最新評論

兴仁县| 古浪县| 梁山县| 彩票| 和硕县| 冀州市| 汉中市| 邓州市| 洪雅县| 剑阁县| 白河县| 通辽市| 葵青区| 白山市| 肥城市| 海门市| 大埔县| 中宁县| 石泉县| 郴州市| 景泰县| 长顺县| 济宁市| 神池县| 汝南县| 桃源县| 建平县| 青海省| 莎车县| 旬邑县| 清新县| 洛隆县| 和平县| 旌德县| 措美县| 盐城市| 呈贡县| 沛县| 砚山县| 定远县| 曲周县|