簡體   English   中英

將字符串傳遞給函數是按值復制還是通過引用傳遞?

[英]Does passing a string to a function copy it by value or pass it by reference?

由於JavaScript中的字符串是基本類型,將字符串傳遞給函數是否會創建它的本地副本? 我想知道這個,因為你不能在創建字符串后修改字符串,所以JavaScript VMs不會僅僅將字符串的地址傳遞給函數內部似乎是不合邏輯的。

如果有人要告訴我我不應該擔心這個問題(與網絡開發人員交談時會發生這種情況),我正在研究HTML5游戲和垃圾收集是一個主要問題,所以我真的需要知道。

該字符串將通過引用傳遞。

字符串不可變,因此每當您嘗試更改它時,您將獲得一個新字符串(例如,通過執行value+="more" )。

另見: 不可變的意思是什么?

@TJ Crowder:通過值與參考 - 如果您正在查看語言定義,那么您是正確的。 但是我不認為有一個實現實際上創建了字符串的副本,因為它會非常慢。 此外,由於字符串是不可變的原語,因此無需復制它們,因為它們無法更改。

我相信規范在這一點上是沉默的。 然而,它將是一個真正的愚蠢的實現,它傳遞字符串的實際內容,而不是在內存中傳遞對該內容的引用,即使字符串在理論上是“原始的”。 我懷疑大多數實現都會處理“原始”字符串,就像它們處理對象引用一樣(在這方面,顯然不是在某些其他字符串中,例如=== ),而只是處理Object陷阱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM