一种js访问不到全局变量的情况

2020-03-14  本文已影响0人  是小张啊啊

一般来说,在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

如理解的有错误的地方,请多多指正,非常感谢~~~~

上一篇 下一篇

猜你喜欢

热点阅读