使用let或const声明的变量在Chrome控制台中不会成为`window`对象的直接属性,为什么?
使用let或const声明的变量在Chrome控制台中不会成为`window`对象的直接属性,为什么?
在Chrome控制台中,当我用let
或const
声明变量时,这些变量不会成为window
对象的属性。然而,用var
声明的变量会成为Chrome控制台中window对象的直接属性。例如:
let sayHi = 'Hi' const greet = 'Good Morning' var sayHola = 'Hola Hola' window.hasOwnProperty('sayHi') //false window.hasOwnProperty('greet') //false window.hasOwnProperty('sayHola') //true
那么在Chrome控制台中,用let
或const
声明的变量实际上具有什么作用域/对象呢?
在Chrome控制台中,使用let
或const
声明的变量不会成为window
对象的直接属性。这个行为是有意的,并且是由标准规定的。它允许将变量更好地隔离到特定的作用域中,避免外部对该作用域的干扰。
变量在控制台中声明时,默认具有全局作用域,除非在块级作用域内定义。以下是一个例子:
let sayHi = 'Hi'; const greet = 'Good Morning'; var sayHola = 'Hola Hola'; console.log(window.hasOwnProperty('sayHi')); // => false console.log(window.hasOwnProperty('greet')); // => false console.log(window.hasOwnProperty('sayHola')); // => true
在Chrome控制台中,变量的作用域和对象是如何定义的呢?变量在控制台中声明时,默认具有全局作用域,除非在块级作用域内定义。这样做可以更好地隔离变量,使其限定在特定的作用域内。