操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    怎么理解JS函數參數是按值傳遞

    我們先來看一下這道題:

    js">var a=[1,2,3];
    function fn(b){
        b=[4,5,6];
    }
    fn(a);
    console.log(a); //請問a 輸出多少
    

    我們接下來再看一道題:

    var obj={
    

    兩手機之間快速傳文件_小米筆記本之間傳文件_不同js文件之間傳值

    name:'大雄' }; function fn(b){ b.name='小熊' } fn(obj); console.log(obj.name); // 輸出多少

    第一道題答案:[1,2,3];

    兩手機之間快速傳文件_小米筆記本之間傳文件_不同js文件之間傳值

    第二道題答案:小熊;

    怎么樣你都答對了嗎?

    接下來我們詳解一下為什么

    《 高級程序設計》第三版中有這么一句話 中所有函數的參數都是按值傳遞的

    但是從第二道題我們明顯感覺到:就是按照引用傳遞的啊;首先我們都知道,js 中的類型分為 值類型和引用類型不同js文件之間傳值,值類型保存在內存棧中,引用類型保存在內存堆中;

    我們看一下 下面的這段代碼:

    var a={
      name:'大雄'
    };
    

    不同js文件之間傳值_小米筆記本之間傳文件_兩手機之間快速傳文件

    var b=a; b.name='小熊'; console.log(a.name);

    這段代碼的執行結果想必大家都知道,因為a 保存的是一個堆指針,b賦值后指向了同一個堆內存;

    我們現在理解下:函數都是按值傳遞的;

    var a={};
    function fn(b){
    

    兩手機之間快速傳文件_小米筆記本之間傳文件_不同js文件之間傳值

    b=2; } fn(a); //這段代碼中函數的參數傳遞相當于如下代碼 function fn(b){ var b=a; // 對參數進行了復制;在棧內存在開辟了空間; }

    所以說:值傳遞 可以理解為復制變量值,基本類型復制后倆個變量完全獨立;引用類型復制的是引用(即指針),之后的任何一方改變都會映射到另一方;

    不同js文件之間傳值_小米筆記本之間傳文件_兩手機之間快速傳文件

    我相信說到這里第二道題的答案大家應該都明白了,接下來我們看一下第一道題:

    // 第一題 相當于如下的代碼
    function fn(b){
        var b=a; // b與a 指向了同一個堆內存;
      b=[4,5,6]; // 并沒有改變指針的內容;而是開辟了一個新的堆空間;所以a,b 就不相互影響了; 
    };
    

    我們用圖說明一下:

    結合圖和代碼,我們對程序的執行一目了然不同js文件之間傳值,相信大家都明白了。

    所以說js中函數的參數都是按值傳遞的

    希望能給大家講明白,有問題歡迎留言,點贊,評論。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有