如何影响传递给函数

时间:2016-09-28 13:23:42

标签: javascript string copy jscript

这是一个非常非常基本的问题,但由于某种原因,我正在努力,无法找到一个很好的参考。

说我在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();

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

我查看过这篇文章How do I correctly clone a JavaScript object?,但找不到我要找的内容。

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

2 个答案:

答案 0 :(得分:1)

你可以做2种方式

func返回值,例如

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

需要更新func以返回值(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 Objects。

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

答案 1 :(得分:1)

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

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

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

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

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

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