值(value)和引用(reference)是各種程式語言老生常談的話題,js也不例外。
我將剖析一個例子的實際運作過程,跟大家分享我對js參數傳遞中的值和引用的理解。
參考官網資料類型的兩種分類,本文將這兩種分類簡稱為基本類型(boolean, null, undefined, string, number, symbol)和object類型。
首先,用一個example 示範參數傳遞的應用:
var obj = {}; obj.inner = 10; var num = 10; var str = 'Hello'; var boo = true; var oth = null; var und = undefined; var sym = Symbol('foo'); function passingobject(myobj){ myobj.inner = 1 + myobj.inner ; } function passingvalue(myvalue){ switch(typeof myvalue){ case 'number': myvalue = myvalue + 1; break; case 'string': myvalue = 'I am a new string now!'; break; case 'boolean': myvalue= false; break; default: myvalue = 'Null, Undefined, or Symbol'; } } console.log("before num = " + num); // before num = 10 passingvalue(num); console.log("after num = " + num); // after num = 10 console.log("before str = " + str); // before str = Hello passingvalue(str); console.log("after str = " + str); // after str = Hello console.log("before boo = " + boo); // before boo = true passingvalue(boo); console.log("after boo = " + boo); // after boo = false console.log("before oth = " + oth); // before oth = null passingvalue(oth); console.log("after oth = " + oth); // after oth = null console.log("before und = " + und); // before und = undefined passingvalue(und); console.log("after und = " + und); // after und = undefined console.log(sym); // Symbol(foo) passingvalue(sym); console.log(sym); // Symbol(foo) console.log("before obj.inner = " + obj.inner); // before obj.inner = 10 passingobject(obj); // after obj.inner = 11 console.log("after obj.inner = " + obj.inner);
從example 1 的結果似乎可以總結出以下兩個結論:
##1. 傳遞的資料類型為基本型別(number, string boolean, null, undefined, symbol),在參數傳遞過程中,函數內部對傳遞值的運算並不會影響原始值。 2. 傳遞的資料類型為object, 在參數傳遞過程中,函數內部對傳遞值的操作會導致原始值的改變。 然而, 有沒有其他特殊情況呢? 有一種在stackoverflow討論很火熱的用法,跟結論二背道而行。 example 2。 範例引自:http://www.php.cn/1 function changeStuff(a, b, c) 2 { 3 a = a * 10; 4 b.item = "changed"; 5 c = {item: "changed"}; 6 } 7 8 var num = 10; 9 var obj1 = {item: "unchanged"}; 10 var obj2 = {item: "unchanged"}; 11 12 console.log(obj1.item); // unchanged 13 console.log(obj2.item); // unchanged 14 changeStuff(num, obj1, obj2); 15 console.log(obj1.item); // changed 16 console.log(obj2.item); // unchangedexample 2中,obj2.item並沒有被函數changeStuff改變。 changeStuff內部同樣改變了b、c的值,為什麼obj1被改變了(L15)而obj2沒有被改變呢? 我用js的執行上下文對這種現象進行解釋,如圖。
總結
在js函數傳遞中,當基本類型(number, string, boolean, null, undefined, symbol)變數作為參數傳遞時,函數內部對參數的任何操作都不會改變變數的值。 當object類型變數作為參數傳遞時,函數內部對參數的操作會影響變數的值,除非函數內部對參數重新賦值(任何類型的值)。
Thank you!
Feel free to contact me if you have any question!
#以上就是JavaScript參數傳遞中值和引用的一種理解的程式碼實例的內容,更多相關內容請關注PHP中文網(www.php.cn)!
JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

WebStorm Mac版
好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。