如何影响传递给函数的字符串对象
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';
}
这是一个非常非常基本的问题,但出于某种原因,我正在苦苦挣扎,找不到很好的参考资料。
假设我在 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';
}