0
点赞
收藏
分享

微信扫一扫

你不知道的JS阅读笔记----(1)

圣杰 2022-01-15 阅读 65

第一部分

第二章:词法作用域

// js只存在两个作用域 函数作用域和块级作用域 快作用域只有let和const ,var不会有块作用域 只会在函数作用域不能用
// if不会生成快作用域
// let会隐式生成块作用域
// 两个代码是一样的
var a = 3;
if (a === 3) {
    let b = 1;
    console.log(b); //1
}
if (a === 3) {
    {
        let b = 1;
        console.log(b); //1
    }
    
}

console.log(b);    //预期not defined referenceerr ,结果not defined referenceerr
var a = 3;
console.log(b);//预期undefined
if (a === 3) {
    {//看来这里的var提升了 , 这个显示的块级作用域只是对let和const 有效果,其实用了let之后加不加这个显示作用域都一样
        var b = 1;
        console.log(b); //1
    }

}
console.log(b);//这里还是能输出1
var a = 3;
if(a === 3){
    var b = 1;
    console.log(b); //1
}
console.log(b);//预期1 结果1
function foo(str){
    eval(str);
    console.log(a);// 2
}

foo('var a = 2')

console.log(a);// a is not defined ,与 undefined 不同 ,undefined是声明了 ,这里看起来var的声明只提升到了函数作用域 

//严格模式下eval有自己的作用域
function foo(str){
    'use strict';
    eval(str);
    console.log(a);// 2
}

foo('var a = 2')

console.log(a);// a is not defined ,与 undefined 不同 ,undefined是声明了 ,这里看起来var的声明只提升到了函数作用域

举报

相关推荐

0 条评论