We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
let和const 声明的变量不能通过window找到,但是可以直接打印出来。
let
const
window
ES2020 在语言标准的层面,引入globalThis作为顶层对象。也就是说,任何环境下,globalThis都是存在的,都可以从它拿到顶层对象,指向全局环境下的this。
globalThis
this
在ES5中,顶层对象的属性和全局变量是等价的,var 命令和 function 命令声明的全局变量,自然也是顶层对象。 ES6 为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,**let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。**也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
在ES5中,顶层对象的属性和全局变量是等价的,var 命令和 function 命令声明的全局变量,自然也是顶层对象。
ES6 为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,**let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。**也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
var
function
class
不属于任何其他对象的属性和方法,最终都是 global 的属性和方法。
ECMAScript 虽然没有指出如何直接访问 Global 对象,但 Web 浏览器都是将这个全局对象作为window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window 对象的属性。
在浏览器中,window对象既是js访问浏览器窗口的一个接口,又是global对象。
var age = 29; function sayAge(){ alert(this.age); } alert(window.age); //29 sayAge(); //29 window.sayAge(); //29
我们在全局作用域中定义了一个变量 age 和一个函数 sayAge(),它们被自动归在了 window 对象
名下。于是,可以通过 window.age 访问变量 age,可以通过 window.sayAge()访问函数 sayAge()。
由于 sayAge()存在于全局作用域中,因此 this.age 被映射到 window.age,最终显示的仍然是正确
的结果。
全局变量不能用delete删除,window对象的属性可以
访问未声明的变量会抛错,但是通过window访问未声明的的变量(属性),不会抛错
//这里会抛出错误,因为 oldValue 未定义 var newValue = oldValue; //这里不会抛出错误,因为这是一次属性查询 //newValue 的值是 undefined var newValue = window.oldValue;
The text was updated successfully, but these errors were encountered:
No branches or pull requests
let
和const
声明的变量不能通过window
找到,但是可以直接打印出来。ES2020 在语言标准的层面,引入
globalThis
作为顶层对象。也就是说,任何环境下,globalThis
都是存在的,都可以从它拿到顶层对象,指向全局环境下的this
。顶层对象
以下为ES5中,红宝书的解释
global 对象
不属于任何其他对象的属性和方法,最终都是 global 的属性和方法。
ECMAScript 虽然没有指出如何直接访问 Global 对象,但 Web 浏览器都是将这个全局对象作为window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window 对象的属性。
window 对象
在浏览器中,window对象既是js访问浏览器窗口的一个接口,又是global对象。
我们在全局作用域中定义了一个变量 age 和一个函数 sayAge(),它们被自动归在了 window 对象
名下。于是,可以通过 window.age 访问变量 age,可以通过 window.sayAge()访问函数 sayAge()。
由于 sayAge()存在于全局作用域中,因此 this.age 被映射到 window.age,最终显示的仍然是正确
的结果。
window对象属性与全局变量的区别
全局变量不能用delete删除,window对象的属性可以
访问未声明的变量会抛错,但是通过window访问未声明的的变量(属性),不会抛错
The text was updated successfully, but these errors were encountered: