为什么这个函数不能重新分配变量?

时间:2015-04-17 05:19:27

标签: javascript arrays

我正在做一个简单的javascript问题,我必须通过一个函数传递一个数组,并重新分配一个不同的数组值。为什么我通过一个数组(甚至任何变量)我必须专门重新分配数组才能改变它?我不能只使用函数中的代码来使用参数为我做这个吗?这是我的代码:

<script>
var str = 'this is my sentence';
//Write a function called reverse that takes is given str as it's only argument and returns that string after it's been reversed

function reverse(x) {
    x = x.split('').reverse().join('');
    return x;
}

//returns with the text reversed, but str is still 'this is my sentence' and not the reversed version
</script>

1 个答案:

答案 0 :(得分:1)

你必须实际调用反向函数。添加str = reverse(str);

后,您的代码就可以运行了
<script>
var str = 'this is my sentence';
//Write a function called reverse that takes is given str as it's only argument and returns that string after it's been reversed

function reverse(x) {
    x = x.split('').reverse().join('');
    return x;
}

str = reverse(str);  //Call the function

window.alert(str);  //show an alert box to view reversed string

</script>

修改

他的问题似乎是[Why do] I have to specifically reassign the array in order for it to change?

参数是基元,有原语,javascript 按值传递。这意味着被调用函数的参数将是调用者传递的参数的副本。它不是同一个项目。

替代方案是按引用传递,在这种情况下,被调用函数的参数将与调用方传递的参数相同。在这种情况下,作为参数传递的对象函数内部发生的更改将在函数外部“可用” - 因为它是同一个对象。这就是Javascript传递对象的方式。

在Javascript中,字符串可以是对象或基元,具体取决于您创建它的方式:

var str = "I'm a String primitive"; //这是一个原始的

var str = new String("I'm a String object"); //这是一个对象