国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

通過(guò)實(shí)例了解js函數(shù)中參數(shù)的傳遞

2024-05-06 15:37:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

先看一道JS的筆試題:

var setObj=function(o){o.name="xiaoming";o={};o.name="xiaohong";}var p={name:"xixi",age:24};setObj(p);console.log(p);

答案是{name:xiaoming,age24};

在JavaScript中函數(shù)參數(shù)默認(rèn)為引用類型。

一.函數(shù)傳遞值類型:

代碼實(shí)例如下:

function addNum(num){ num+=10; return num;}var num=10;var result=addNum(num);console.log(num);console.log(result);

以上代碼的彈出值分別為:10和20,下面進(jìn)行一下分析:

聲明變量num并復(fù)制為10,這個(gè)是num是一個(gè)值類型,當(dāng)為函數(shù)傳遞參數(shù)的時(shí)候,是將此值復(fù)制一份傳遞給函數(shù),所以在函數(shù)執(zhí)行之后,num本身的值并沒(méi)有被改變,函數(shù)中被改變的值僅僅是一個(gè)副本而已。

二.函數(shù)傳遞引用類型:

 function setName(obj){ obj.name="青島新銳"; } var web=new Object(); web.name="螞蟻部落"; setName(web); console.log(web.name);

以上代碼的彈出值是:“青島新銳”,下面進(jìn)行一下分析:

聲明一個(gè)對(duì)象web,它是一個(gè)引用類型,當(dāng)為函數(shù)傳遞參數(shù)的時(shí)候,是傳遞的web對(duì)象的引用,也就是此對(duì)象的內(nèi)存地址,所以在函數(shù)中修改屬性的對(duì)象就是函數(shù)外面創(chuàng)建的對(duì)象本身。

三.加深理解:

function setName(obj){  obj.name="青島新銳";  obj=new Object();  obj.name="螞蟻部落";  }  var web=new Object(); setName(web); console.log(web.name);

以上代碼的彈出值是:青島新銳,很多人可能會(huì)以為將會(huì)彈出“螞蟻部落”,下面進(jìn)行一下簡(jiǎn)單的分析:

在函數(shù)外面創(chuàng)建一個(gè)對(duì)象,并將對(duì)象的引用賦值給變量web,web中存儲(chǔ)的是對(duì)象在內(nèi)存中的存儲(chǔ)地址,當(dāng)為函數(shù)傳遞參數(shù)的,就是傳遞的在函數(shù)外面創(chuàng)建的對(duì)象的地址。在函數(shù)中,為外面創(chuàng)建的對(duì)象創(chuàng)建一個(gè)自定義屬性name并賦值為“青島新銳”,然后又創(chuàng)建一個(gè)新的對(duì)象,并將新對(duì)象的地址賦值給obj,這個(gè)時(shí)候obj指向的并不是函數(shù)外面創(chuàng)建的對(duì)象,所以外面對(duì)象name屬性不會(huì)被改變。

這樣寫(xiě)對(duì)于其他語(yǔ)言的程序員來(lái)說(shuō)是很難接受的,我們?cè)趯?shí)際的開(kāi)發(fā)中避免這樣的寫(xiě)法,因?yàn)檫@樣會(huì)造成全局作用域污染。最近在讀《javascript高級(jí)程序設(shè)計(jì)》時(shí)碰到了js傳遞方式的問(wèn)題,花費(fèi)了些時(shí)間,不過(guò)總算明白了。

數(shù)據(jù)類型

在 javascript 中數(shù)據(jù)類型可以分為兩類:

基本類型值 primitive type,比如Undefined,Null,Boolean,Number,String。 引用類型值,也就是對(duì)象類型 Object type,比如Object,Array,Function,Date等。

變量的復(fù)制

眾所周知,js中變量的基本類型和引用類型保存方式是不同的,這也就導(dǎo)致變量復(fù)制時(shí)也就不同了。如果從一個(gè)變量向另一個(gè)變量復(fù)制基本類型的值時(shí),會(huì)將前者的值克隆一個(gè),然后將克隆的值賦值到后者,因此這兩個(gè)值是完全獨(dú)立的,只是他們的value相同而已。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 铜川市| 满洲里市| 克东县| 新蔡县| 镇宁| 徐闻县| 墨竹工卡县| 遂平县| 西乌珠穆沁旗| 青铜峡市| 夹江县| 茶陵县| 佳木斯市| 尤溪县| 锦州市| 枣阳市| 商水县| 介休市| 余干县| 广州市| 车致| 靖宇县| 澳门| 林口县| 竹溪县| 盐源县| 丹阳市| 阿巴嘎旗| 淮南市| 德令哈市| 普兰县| 西林县| 屏东县| 浑源县| 洪雅县| 厦门市| 鄂托克旗| 兴海县| 越西县| 泉州市| 麟游县|