javascript - ES6中的let const的作用
ringa_lee
ringa_lee 2017-04-11 09:54:30
[JavaScript讨论组]

“ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在ES5是很常见的,现在有了这种规定,避免此类错误就很容易了。”
能够举例说明在ES5中有哪些常见的错误吗

ringa_lee
ringa_lee

ringa_lee

全部回复(3)
PHP中文网

最简单的,比如说 for(var i = 0; i < 10; i ++){},i在for循环之后还会存在,还能被调用,i的值还会被保存,这个就可能导致bug的出现了

PHP中文网

1.变量提升。

使用let你在一个变量声明之前使用是会报错的。但是var就正常。
比如:

    //right
    a = 4;
    var a = 3;
    
    //error
    a = 4;
    let a = 3; 

又比如你变量声明的是一个函数:

    //error
    sub();
    let sub =  function(){
        console.log(111);
    }
    
    //right 
    sub();
    var sub =  function(){
        console.log(111);
    }

2.块作用域和函数作用域。
ES5是函数作用域,也就是说,在ES5中函数的那对大括号{}才看成一个块。而for这类循环不会。但是ES6将所有的{}都看成一个单独的代码运行块:就是说,{}代码块运行的时候会创建自己的运行环境,你可以想象成一个房子,在进去运行的时候,他会将参数带进去,在里面完成自己所有的操作,变量的声明也只对他自己有效。当代码块运行结束了,就返回运行结果(如果有)并销毁自己的房子和房子里的一切。
举个栗子

//ES5
for(var i = 0; i<5;i++){
    var abc = "abc";
}

console.log(abc);//将会打印出 abc

function bbb(){
    var ddd = 123456;
}

console.log(ddd);//将会打印出 undefined

//ES6 
for(let i = 0; i<5;i++){
    let abc = "abc";
}

console.log(abc);//将会打印出 undefined

function bbb(){
    let ddd = 123456;
}

console.log(ddd);//将会打印出 undefined

为什么ES6规定成块作用域呢?

欢迎来到JavaScript的进阶 课后作业! 希望能够帮到你~

迷茫
1.变量提升:
console.log( a );         => undefined
var a = 0;

上面两行代码等同于

var a;
console.log( a );
a = 0;

2.块级作用域
if( true ) {
    var a = 0;
}
console.log( a );            => 0
es5 没有块级作用域,有函数作用域

3.es6 变量提升
console.log( a );            => 报错
let a = 0;

es6 块级作用域
if( true ) {
    let a = 0;
}
console.log( a );            => 报错

个人认为变量提升和无块级作用域本身就不规范,应该摒弃掉。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号