日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

传递参数的2种情况的理解。

發(fā)布時(shí)間:2023/12/10 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传递参数的2种情况的理解。 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近差不多一個(gè)月沒(méi)寫(xiě)博客了,主要的原因是目前在使用 Markdown 寫(xiě)學(xué)到的一些心得,一方面方便記筆記,另一方面頁(yè)面排版更加的美觀。

個(gè)人筆記站點(diǎn) : https://yewenxiang23.github.io


碰到的問(wèn)題:

今天碰到一個(gè)關(guān)于傳遞參數(shù)的問(wèn)題,想了一下午,終于想通了,打算總結(jié)記錄一下:

解決的思路:傳參是值復(fù)制的一個(gè)過(guò)程,傳遞的是值,

1 function setName(obj){ 2 obj.name = "yewenxiang"; 3 obj = new Object(); 4 obj.name = "ye"; 5 } 6 var person = new Object(); 7 setName(person); 8 console.log(person.name); //yewenxiang

上面的代碼輸出了 "yewenxiang",而不是"ye"。感覺(jué)非常的怪異,下面來(lái)對(duì)于傳遞參數(shù)做一個(gè)總結(jié)。


?

傳遞參數(shù):

  • 所有的函數(shù)參數(shù)都是按值傳遞的

   也就是說(shuō),把函數(shù)的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣。

值有兩種類型:

  • 基本類型:值保存在棧內(nèi)存中,復(fù)制的時(shí)候也是把值同時(shí)也復(fù)制了一份。
  • 引用類型:值保存在堆內(nèi)存中,棧內(nèi)存中保存的只是指向堆內(nèi)存中值的一個(gè)指針,復(fù)制的時(shí)候紙箱基本類型傳參:

例子就拿 《javascript高級(jí)程序設(shè)計(jì)》上的例子來(lái)說(shuō)

基本類型的值傳參:

1 function addTen(num){ 2 num += 10; 3 return num; 4 } 5 var count = 20; 6 var result = addTen(count); 7 console.log(count); //20 8 console.log(result); //30

函數(shù) addTen() 有一個(gè)num 參數(shù),而參數(shù)實(shí)際上是函數(shù)的局部變量。在調(diào)用這個(gè)函數(shù),并傳入?yún)?shù) count時(shí)。由于 count的值為20,傳遞參數(shù)的過(guò)程是一個(gè)值得復(fù)制過(guò)程,也就是把 count 的值20,復(fù)制給了參數(shù)(函數(shù)的局部變量) num = 20。在堆內(nèi)存中存在了 count=20 和num=20,兩個(gè)變量是互相不干擾的。

引用類型的值傳參:

1 function setName(obj){ 2 obj.name = "yewenxiang"; 3 } 4 var person = new Object(); 5 setName(person); 6 console.log(person.name); //"yewenxiang"

這個(gè)例子中傳入了一個(gè) person 對(duì)象,也就是引用類型,引用類型的復(fù)制和基本類型的復(fù)制不同,復(fù)制的是棧內(nèi)存 變量person 中保存的地址,這個(gè)地址也指向堆內(nèi)存中同一個(gè)對(duì)象。所以修改了函數(shù)局部變量 obj的name屬性為"yewenxiang" ,person.name也變?yōu)榱?#34;yewenxiang"。

證明參數(shù)是按值傳遞的一個(gè)例子:

1 function setName(obj){ 2 obj.name = "yewenxiang"; 3 obj = new Object(); 4 obj.name = "ye"; 5 } 6 var person = new Object(); 7 setName(person); 8 console.log(person.name);

這是我碰到的問(wèn)題,開(kāi)始我想的是輸出 "ye" ,為什么會(huì)輸出 "yewenxiang"呢。明明obj代表的是person這個(gè)對(duì)象,而函數(shù)內(nèi)部賦值之后又重新構(gòu)造了一個(gè)新對(duì)象并賦值為 "ye",所以應(yīng)該輸出 "ye"啊,為什么不是呢?那肯定是想錯(cuò)了嘛。廢話少說(shuō) 直接上圖:

上面3.4行代碼執(zhí)行之前:

3.4行代碼執(zhí)行之后:

由于obj為函數(shù)的局部變量,那么我們?nèi)绾巫C明呢?

1 function setName(obj){ 2 obj.name = "yewenxiang"; 3 console.log(obj.name); //yewenxiang 4 obj = new Object(); 5 obj.name = "ye"; 6 console.log(obj.name); //ye 7 } 8 var person = new Object(); 9 setName(person); 10 console.log(person.name); //yewenxiang 11 console.log(obj.name); //報(bào)錯(cuò)

這樣就證明了我的想法是正確的。

?

   

?

轉(zhuǎn)載于:https://www.cnblogs.com/yewenxiang/p/6337961.html

總結(jié)

以上是生活随笔為你收集整理的传递参数的2种情况的理解。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。