chrome怎么判断代码运行在es6还是es5

function b(){
    'use strict';
    var a=0;
    {
        var a=1;
        console.log(a);
    }
    console.log(a);
}
b();
function c(){
    'use strict';
    let a=0;
    {
        let a=1;
        console.log(a);
    }
    console.log(a);
}
c();

直接在Chrome中运行会输出1110,为什么b()会判定在es5而c()判定在es6?就因为c()有使用到let吗?

阅读 11.1k
5 个回答

这个和浏览器运行es5和es6没关系,和浏览器没关系,只是let和var的区别,let有块级作用域。es6 let

首先我们所说的ES5 ES6他都只是ECMA Script技术委员会的技术规范,浏览器的更新会支持这种语法规范。然后ES6是对ES5的扩充,新增了一些语法,并没有废弃var声明变量。现在大多数浏览器都支持ES6规范了,也就没必要用var声明白变量了

对于浏览器而言…是不管在es5还是es6的…只要是它支持的语法就都可以运行呐…

所以只是let的作用噻…

所谓的es5和es6只是标准而已,
浏览器会自己实现标准定义的API,chrome应该是没有在检测运行的是es5或es6,它只是正常输出而已,而如果你在不支持let语句的浏览器上运行,应该会报语法错误

function b(){
    'use strict';
    var a=0;
    // 这个时候a===0,毫无疑问,作用域只有一个a
    {
        var a=1;
        // 这个时候a===1,且这个时候声明的`a`已经覆盖了上一个`a`
        console.log(a);
    }
    // a===1
    console.log(a);
}
b();
function c(){
    'use strict';
    let a=0;
    // a===0
    {
        // a===1,当由于使用的let,只在当前块状作用域内起效
        // 没有影响上面定义的a
        let a=1;
        console.log(a);
    }
    // a===0
    console.log(a);
}
c();

es6引入了块级作用域的概念,为了兼容过往版本,所以新增了let和const,这两个是块级作用域。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题