一般来说,在js中声明的全局变量,在哪里都可以访问的到,因为他是在全局作用域中。但是,如果在全局作用域内声明了一个变量a,在函数作用域内又重新声明了a,那么该函数作用域内是访问不到全局作用域中的a,原因是重复声明的变量会覆盖原有的变量。请看下面的两个例子:
let name = 'lucy';
(function test() {
console.log(name);
if (typeof name === 'undefined') {
var name = 'LC';
console.log('Hi!'+name);
} else {
console.log('Hi!'+name);
}
})();
打印的结果依次是:undefined 和 Hi! LC
原因:用var声明的变量会存在变量提升,在打印第一个name时,由于变量提升此时的name = undefined,并且会覆盖全局变量中的name,所以会进入到if判断语句中,打印LC。
let name = 'lucy';
(function test() {
console.log(name);
if (typeof name === 'undefined') {
let name = 'LC';
console.log('Hi!' + name);
} else {
console.log('Hi!' + name);
}
})();
打印结果依次是:lucy 和 Hi!lucy
原因:打印第一个name时,由于let声明的变量不存在变量提升,所以此时的name值还为全局变量 lucy,进而进入到else语句中,打印出 Hi! lucy
如理解的有错误的地方,请多多指正,非常感谢~~~~
网友评论