我正在尝试定义一个已在函数参数中选择的变量,但它不会更改我在参数中使用的变量。
我的代码:
var x = "nothing yet!";
function changeValue(variable) {
variable = "x";
}
changeValue(x);
console.log(x);
当我通过控制台运行时,它只是“没有任何东西!”当我希望它以“x”形式出现时。
任何有关解决此问题的帮助都会非常有用。
答案 0 :(得分:2)
在JavaScript strings are primitive value types中。你不能在像这样的函数中改变它们。
它们也是不可改变的。更改示例中的字符串就像更改数字2 :)
要强调的是,对于JavaScript - 您正在做的事情有点像:
function makeTwoThree(two){
two = 3;
}
var two = 2;
makeTwoThree(two); // two is passed by value since it's a value type.
你应该返回它:
function changeValue(variable) {
return "x";
}
variable = changeValue(variable);
或者,您可以将其包装在对象中并传递可以更改引用的对象。但是,请记住,您不是在这里更改字符串,而是替换它。
答案 1 :(得分:-1)
您应该将其作为全局变量引用,方法如下:
var x = "nothing yet!";
function changeValue(variable) {
window[variable] = "x";
}
changeValue("x");
console.log(x);
这会将x
放入您的控制台。这是有效的,因为变量x是在全局范围内定义的(在任何函数之外)。您也可以这样做,因为如果它还需要在全局范围之外工作,那么在函数内部:
(function() {
var x = "nothing yet!";
function changeValue(variable) {
this[variable] = "x";
}
changeValue("x");
console.log(x);
})()
该代码中的this
引用了它的调用范围,因此在这种情况下,this[variable]
只是从调用它的函数中获取变量x。