写了这样一段代码,执行结果和预期不一样,为什么?

代码如下:

const testFunc = (str)=>{
    str = 'my test str'
}
let str = ''
testFunc(str)
console.log(str)

2020年01月15日23:18:16晚上新加:

一时迷糊了,因为经常直接在函数中操作对象,当换成字符串,发现不起作用后没有反应过来。如下代码:

let a = { name: '11111', sex: 'nan' }
const setName = (param) => {
    console.log(param === a)
    param.name = 'test'
}
setName(a);
console.log(a)

如果把上面的setName(a)换成setName(a.name)、把param.name = 'test'换成param = 'test',可以看到结果又不一样了。

出现上面结果的原因是没有完全理解全局作用域、函数作用域

  • 当传入参数是常量的时候,对参数的更改是在函数作用域里面,并不会影响全局作用域的值。
  • 当传入的参数是对象的时候,虽然函数外部是全局作用域,参数是函数作用域,但是由于对象使用的是同一块内存,当内容改变后,全局作用域里面的值和函数作用域里面的值都发生改变。
待解决 悬赏分:80 - 离问题结束还有 235天1小时37分29秒
反对 0举报 0 收藏 0

我来回答

回答5