这是一个非常非常基本的问题,但由于某种原因,我正在努力,无法找到一个很好的参考。
说我在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?,但找不到我要找的内容。
我们有一个简单,直接的解决方案吗?
答案 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';
}