使用let或const声明的变量在Chrome控制台中不会成为`window`对象的直接属性,为什么?

12 浏览
0 Comments

使用let或const声明的变量在Chrome控制台中不会成为`window`对象的直接属性,为什么?

在Chrome控制台中,当我用letconst声明变量时,这些变量不会成为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控制台中,用letconst声明的变量实际上具有什么作用域/对象呢?

0
0 Comments

在Chrome控制台中,使用letconst声明的变量不会成为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控制台中,变量的作用域和对象是如何定义的呢?变量在控制台中声明时,默认具有全局作用域,除非在块级作用域内定义。这样做可以更好地隔离变量,使其限定在特定的作用域内。

0