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

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.3k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题