美文网首页
一种js访问不到全局变量的情况

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

作者: 是小张啊啊 | 来源:发表于2020-03-14 09:54 被阅读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

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

    相关文章

      网友评论

          本文标题:一种js访问不到全局变量的情况

          本文链接:https://www.haomeiwen.com/subject/ecfmshtx.html