通过引用将变量传递给Function,并更改值吗?

时间:2015-05-21 09:25:47

标签: javascript pass-by-reference

我有一个变量,我将其传递给函数,并返回其更新值。语法看起来非常类似于:

var myName = 'hello all.';

FuncUpperCase(myName);

function FuncUpperCase(myName) {
     myName = myName.toUpperCase();
     return myName;
}

但变量myName似乎没有使用toUpperCase()的值进行修改。

注意:我不想写var newName = FuncUpperCase(myName),因为我不喜欢这种语法。

2 个答案:

答案 0 :(得分:1)

这可能会回答你的问题:

Windows Phone Music app

或者,传递一个对象而不是一个字符串。

var something = {};
something.word = "word";
var allcaps = function(inp) {inp.word = inp.word.toUpperCase();};

allcaps(something);

//something.word has now been changed
alert(something.word);

答案 1 :(得分:0)

在JavaScript中,所有内容都按值传递。这意味着如果为函数中的给定参数重新分配值,则不会修改给定函数范围之外的值。另一个需要理解的重要事项是对象引用的值如何工作:如果将对象传递给函数,它也是按值给出的,但如果访问该对象的属性,则实际对象将被修改函数外部,但不是值(也就是说,是对象引用的值)。

最后,您必须将一个对象传递给您的函数并修改它的属性以使其在外部持久存在。

function setToUpperCase(object, key) {
    object[key] = ('' + object[key]).toUpperCase();
    return object[key];
}

并像这样使用它:

var holder = { word: 'blah' };
setToUpperCase(holder, 'word');
console.log(holder.word); // BLAH