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