如何影响传递给函数的字符串对象

How to affect string object passed to a function

本文关键字:函数 字符串 对象 何影响 影响      更新时间:2023-09-26

这是一个非常非常基本的问题,但由于某种原因,我很难找到一个很好的参考。

假设我有这个JScript代码在WSH下运行:

function func(myStr) {
    var res = "abc";
    myStr = res;
}
function main() {
    var myStr = new String();
    WScript.Echo(myStr);
    func(myStr);
    WScript.Echo(myStr);
}
main();

I将String对象传递给func,期望func设置对象的值。然而,func使用operator =,它复制内容,但生成一个新的引用

我回顾了这篇文章,我如何正确地克隆一个JavaScript对象?我找不到我要找的东西

我们有一个简单直接的解决方案吗?

最重要的是:对象是通过引用传递的。其他东西,比如字符串,数组,数字…按值传递

每次将字符串传递给函数时,只有其值的副本被传递给该函数(因此不要认为您的字符串对象是对象,也不要询问克隆)。但是任何指向原始变量的链接都会丢失。

另一方面,当你将

对象传递给函数时,对象的地址(指针/引用)被传递给函数,所以它是内部和外部相同的变量。因此,函数内部对象发生的任何变化都会影响函数外部的对象。

现在,看一段类似的代码,但是传递了对象

var myObject = {};
myObject.txt = 'Foo';
console.log(myObject.txt);
func(myObject);
console.log(myObject.txt);
function func(obj) {
  obj.txt = 'Hello World';
}

有两种方法

返回func的值,如

  var myStr = new String();
  myStr = func();

其中func需要更新以返回值(return res)

或者你可以使用object但是你需要改变一些东西

function func(myStr) {
    var res = "abc";
    myStr.value = res;
}
function main() {
    var myStr = {};
    WScript.Echo(myStr.value);
    func(myStr);
    WScript.Echo(myStr.value);
}
main();

这样你的myStr就是对那个对象的引用。我建议你读一读JS Objects

参考:
http://eloquentjavascript.net/06_object.html
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects