首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为函数参数赋值,重用函数参数安全吗?

为函数参数赋值,重用函数参数安全吗?
EN

Stack Overflow用户
提问于 2021-09-15 14:07:41
回答 3查看 39关注 0票数 0

重用函数参数变量是不是一种糟糕的做法?

代码语言:javascript
复制
const reformat = (phone)=>{
    phone = phone.replace("-", ",")

    //... more operation using phone

    return phone;
}

有什么理由应该避免这样的重用吗?或者继续这样的使用总是安全的?

EN

回答 3

Stack Overflow用户

发布于 2021-09-15 14:14:08

对于字符串,就像您的示例中一样,这是很好的。有些人可能会认为,如果您尝试调试该变量并在更改后将其记录到控制台中,这可能会让人感到困惑,但这主要是主观的。使用你的最佳判断力。

对于总是通过引用传递的对象,您应该避免在函数中进行更改,因为这些更改也会出现在函数之外。

例如:

代码语言:javascript
复制
var myObject = {
  message: "Hello, world"
};

function alertMessage(msgObj){
  msgObj.message = "Hello moto";
  alert(msgObj.message);
}

alertMessage(myObject);

// The object has changed.
console.log(myObject);

票数 1
EN

Stack Overflow用户

发布于 2021-09-15 14:17:19

不,不是。它有时会节省内存,因为当你使用另一个新变量时,它会占用你的内存。而且函数的过程要长得多,因此进行许多转换将不是一个好的做法。所以根据你的问题,

  1. 可以,您可以在函数内使用相同的变量(但请确保考虑作为arguments)
  2. Re-usage传递时应避免使用哪些类型,因为这会更改原始对象的内容。
票数 1
EN

Stack Overflow用户

发布于 2021-09-15 14:26:45

需要注意的不同情况:

代码语言:javascript
复制
// argument is not a reference ( string, numbers )
function add_5(num)
  {
  num += 5
  return num
  }

let initial_num = 10
let returned_num = add_5(initial_num )
 
console.log( `initial_num-> ${initial_num}, returned_num-> ${returned_num}`)


// argument is  reference ( objects )
function directArgObj( obj)
  {
  obj.num += 5
  }

let initial_obj = { num: 10, abc:'xyz' }

directArgObj(initial_obj )

console.log( `initial_obj-> ${JSON.stringify(initial_obj)} `)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69194723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档