javascript - javascript中函数内部的突变

标签 javascript scope mutation

n00b 问题在这里:

假设你像这样调用一个更新数字或字符串的函数

var x = "well";
var helloify = function(str){
  str += "hello"
};

我期望这种行为:

helloify(x);
console.log(x)
\\ "well hello"

但是我得到了

\\ "well"

“+=”不会改变“x”的值吗?这种变化是否只在功能范围内持续存在,而不会在全局环境中持续存在?

谢谢!

--困惑

最佳答案

当您调用 helloify(x); 时,您传递的是 x(字符串)而不是引用x

str += "hello" 修改 str 并单独保留 x


注意:对象仅通过引用寻址,因此如果 x 是对对象的引用,那么您将修改由两个变量寻址的单个对象。虽然简单的字符串不是对象。

关于javascript - javascript中函数内部的突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465324/

相关文章:

javascript - 如何提取嵌入标签的 src 属性

javascript - 让JS执行一个函数,通过加载另一个html文件

ruby - 为什么在我的示例中可以公开访问此内容 : "MySymbol::TABLE"

javascript - 事件 : What are good practices for avoiding inline Javascript? 的范围问题

javascript - 使用另一个数组的元素改变一个数组,同时保持顺序和现有实例

javascript - 如何在 Javascript 中创建多个变量

javascript - 使用 Javascript 将 HTML 表格导出到 Excel

c - 函数范围和递增参数

javascript - Vuex - 更新突变中的对象

java - 用 ANN 求解 XOR 的进化算法的改进