Project1

标题: js代码问题 [打印本页]

作者: 笹舟丶萚    时间: 2020-1-16 18:10
标题: js代码问题

如图所示,输出的两次alert竟然不同,我term()方法并没有改变那个值啊,为什么!?
作者: 喵呜喵5    时间: 2020-1-16 19:38
你想问的是不是引用传递的问题

  1. var a = {}
  2. var b = a
  3. b['test'] = 123
  4. alert(a)
复制代码

作者: 笹舟丶萚    时间: 2020-1-16 23:01
喵呜喵5 发表于 2020-1-16 19:38
你想问的是不是引用传递的问题

搜了一下我懂了,我以为形参是不改变原变量的。那我不想动原变量该怎么修改代码
作者: 笹舟丶萚    时间: 2020-1-16 23:05
笹舟丶萚 发表于 2020-1-16 23:01
搜了一下我懂了,我以为形参是不改变原变量的。那我不想动原变量该怎么修改代码 ...

用clone是吧?
作者: 笹舟丶萚    时间: 2020-1-16 23:14
笹舟丶萚 发表于 2020-1-16 23:05
用clone是吧?

我知道了,用slice(0)就ok了,解决了
作者: 喵呜喵5    时间: 2020-1-17 01:42
本帖最后由 喵呜喵5 于 2020-1-17 01:43 编辑

别修改原数组就行了,例如 attr = attr.concat([]) 直接浅拷贝一个 attr 出来

或者你这段逻辑我自己习惯用 map
  1. term = function(attr){
  2.   return attr.map((e, index){
  3.     if (e === "等级"){ return TextManager.level }
  4.     else if (e === "HP"){ return TextManager.hp }
  5.     // .....省略一堆else if
  6.     else{ return attr[index] }
  7.   })
  8. }
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1