请教这段代码的两个问题?

作者站长头像
站长
· 阅读数 13
const myName = 'global name'
var descript = 'global desc'

function fn(){
    console.log(myName, descript)
    console.log(this.myName, this.descript)
}

fn()

如上代码,在最新版Chrome控制台执行结果是

global name global desc
undefined 'global desc'

在Node.js(16.17.0)中执行结果是

global name global desc
undefined undefined

有2个问题(1)为什么两个地方的this.descript结果不同(2)直接输出myName,在fn中找不到应该是去外边的全局环境找,但是myName是用const声明的,不会成为全局对象的属性,为什么还能找到?

回复
1个回答
avatar
test
2024-07-18

因为this;对于变量的查找两边是一致的这没什么好说的。但是this是上下文,在chrome中执行,this指向的是window【非严格模式下】,而var在全局中执行时也会挂载在window上,所以this.descript有值。在node里,代码都会隐式的被包裹在一个函数里,所以你在文件中声明的变量是局部的,并不会挂载在全局上,所以都是undefined

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容