Loading

全局作用域和全局变量的区别

2021/11/18更新:

ES6规定全局变量与顶层对象(Window)脱离关系
var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

var abc = '123'; // 全局变量,可以再全局使用,不能通过 delete 方法删除
abcd = '1234'; // 相当于挂载在全局变量 window 上的属性,具有全局作用域,但不是全局变量,可能被delete方法删除
function test() {
    abce = '12345' // 相当于挂载在全局变量 window 上的属性,具有全局作用域,但不是全局变量,可能被delete方法删除
}
 
test()
 
console.log(abc, abcd, abce); // 123, 1234, 12345
 
delete abce; // 返回true
delete abcd; // 返回true
delete abc; // 返回false
console.log(abc); // 123
console.log(abcd); // undefind
console.log(abce); // undefind

if(1){
a=10;
console.log(a,window.a);
function a(){}
console.log(a,window.a);
a=20;
console.log(a,window.a);
}
console.log(a);
结果
10 10
10 10
20 10
10

[解释:](js题,为什么第二个a输出是1? - 放羊男孩的回答 - 知乎
https://www.zhihu.com/question/433134533/answer/1611261709)

ES6 浏览器中,块级作用域内的函数声明语句的行为对外类似于 var ,对内类似于 let。

posted @ 2021-03-17 14:34  二柒的博客  阅读(194)  评论(0编辑  收藏  举报