代码如下:
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
收藏 0
分享 0
