js var变量提升问题?

        var x = 3;
        var y = 4;
        var obj = {
            x: 1,
            y: 6,
            getX: function () {
                var x = 5;
                return function () {
                    return this.x;
                }();
            },
            getY: function () {
                console.log(this);
                console.log(window.y);
                var y = 7;   //这个var
                console.log(window.y);
                return this.y;
            }
        }
        console.log(obj.getX()) // 3
        console.log(obj.getY()) // 6

答案倒是能理解 我想问一下var y = 7 为什么没有变量提升改变全局变量中的y的值。
另外这里定义的y是哪里的变量

阅读 1.9k
2 个回答

var y = 7;getY这个函数内部作用域中的变量,不在全局作用域中

只有全局作用域下的 var 声明,才会挂在至全局对象上。

所以你会发现,JQuery 也是使用 var 创建的变量,但是它必须手动挂载至全局对象上,否则外界依旧找不到 $

下面的例子是一个简单的说明,块级作用域只存在于 letconst,而 var 不关注这个:

(() => {
    var a = 30
    console.log(globalThis.a); // undefined
})();
console.log(globalThis.a); // undefined
var a = 10;
{
    var a = 20;
    console.log(globalThis.a); // 20
}
console.log(globalThis.a); // 20
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏