JavaScript函数传参后原变量值未修改的原因、实现方法及混淆点
问题解答
为什么变量值没被传回?
JavaScript里的原始类型(字符串、数字、布尔、null、undefined、Symbol)是按值传递的。当你调用change(name)时,实际上是把name的当前值'Jean-Luc'复制了一份,传给函数内部的str参数。函数里修改str = 'Wesley',只是修改了这个副本变量,和外部的name完全是两个独立的变量,所以外部的name值不会变。
能不能实现传参修改原变量?
可以,有两种常见方式:
- 使用引用类型(对象/数组):引用类型传递的是内存地址的副本,修改地址指向的内容会影响原变量。比如:
var person = { name: 'Jean-Luc' }; function change(obj) { obj.name = 'Wesley'; // 修改对象的属性,会影响原对象 } change(person); console.log(person.name); // 输出Wesley - 让函数返回新值,外部重新赋值:如果是原始类型,更推荐这种方式,逻辑更清晰:
var name = 'Jean-Luc'; function change(str) { return 'Wesley'; } name = change(name); console.log(name); // 输出Wesley
你混淆了哪种语言的语法?
你混淆的是Pascal的var参数(按引用传递,修改参数会直接影响原变量),或者C语言的指针传递(通过指针解引用可以修改原变量的值)。这些语言里支持直接传递变量的引用/指针来修改原变量,但JavaScript的原始类型不支持这种操作,只有引用类型能间接实现类似效果。
内容的提问来源于stack exchange,提问作者user1138
相关产品推荐
相关产品推荐

