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

How to affect string object passed to a function

这是一个非常非常基本的问题,但出于某种原因,我正在苦苦挣扎,找不到很好的参考资料。

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

function func(myStr) {
    var res = "abc";
    myStr = res;
}

function main() {
    var myStr = new String();

    WScript.Echo(myStr);
    func(myStr);
    WScript.Echo(myStr);
}

main();

我将 String 对象传递给 func 并期望 func 设置对象的值。但是,func 使用 operator = 复制内容但生成新引用

我查看了此 post、How do I correctly clone a JavaScript object?,但找不到我要找的内容。

对此我们有简单直接的解决方案吗?

你可以通过两种方式做到这一点

func 返回值,如

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

其中 func 需要更新为 return 值 (return res)

或者您可以使用对象,但您需要更改一些内容

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 对象。

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

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

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

对象,另一方面,当你将它们传递给函数时,对象的地址(指针/引用)被传递给函数,所以它在内部和外部是同一个变量。因此,函数内部对象发生的任何事情都会影响外部对象(也)。

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

var myObject = {};
myObject.txt = 'Foo';
console.log(myObject.txt);
func(myObject);
console.log(myObject.txt);

function func(obj) {
  obj.txt = 'Hello World';
}