var a = 1
window.b = 2
c = 3
通过window
或者直接声明的变量是全局变量,但是如果是通过var
声明的变量如果在函数作用域内是不能被外面的访问到的。
JavaScript的作用域只有函数作用域或者全局作用域,没有块级作用域
console.log(a) // undefined 变量提升
var a = 1
console.log(a) // 1
这里第一次的输出结果是undefined
,第二次是1
,原因是虽然a的定义是在第一次的输出之后,但是这个时候出现的变量提升( hoisting )
console.log(a) // Uncaught ReferenceError: a is not defined 全局变量不会做变量提升
a = 1
console.log(a) // 1
但是全局变量就不会出现这样的情况
var a = 1;
window.b = 2
c = 3
console.log(a) // 1
console.log(b) // 2
console.log(c) // 3
delete a;
delete b;
delete c;
console.log(a); // 1
console.log(b); // Uncaught ReferenceError: b is not defined
console.log(c); // Uncaught ReferenceError: c is not defined
delete只会删除全局变量,不会删除var声明的变量