js基础-声明提升

    技术2022-07-16  57

    声明提升

    概念:变量和函数的声明会在物理层面移动到代码的最前面,但这么说也并不准确。实际上变量和函数在代码里的位置是不会变的,而是在编译阶段被放入内存中。

    常见的示例如下:

    var x = 1; // 声明 + 初始化 x console.log(x + " " + y); // '1 undefined' var y = 2; // 声明 + 初始化 y //上面的代码和下面的代码是一样的 var x = 1; // 声明 + 初始化 x var y; // 声明 y console.log(x + " " + y); // y 是未定义的 y = 2; // 初始化 y

    关于let

    不存在变量提升 a = 1; var a; console.log(a) // 1 b = 1; let b; console.log(b) // 引用报错 Uncaught ReferenceError: b is not defined 作用域

    let 的作用域是块级的

    {var a = 1} {let d = 1} console.log(a) console.log(d) // Uncaught ReferenceError: d is not defined 不能重复声明 var a = 1; var a = 2; let b = 1; let b = 2; // Uncaught SyntaxError: Identifier 'b' has already been declared 暂时死区 console.log(a) // undefined console.log(b) // 报错 Uncaught ReferenceError: b is not defined var a = 1 var b = 1

    给一个例子来看一下输出结果:

    var a = 1; function b() { a = 10; return; function a() {} } b(); console.log(a) // 1 // 解析:函数b 等同于以下写法 function b() { var a = function () {} a = 10 return }
    Processed: 0.013, SQL: 9