<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script src="js/browser.min.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            {
                let a = 10;
                var b = 1;
            }
            //console.log(a); //报错
            console.log(b);    //1

            for(let i = 0; i < 10 ; i++){}
            //报错console.log(i);    //报错
            var a = [];
            for(var i = 0 ; i < 10 ; i++){
                a[i] = function(){
                    console.log(i);
                }
            }
            a[6]();    //10
            //let 版本
            for(let i = 0 ; i < 10; i++){
                a[i] = function(){
                    console.log(i);
                }
            }
            a[6]();    //6
            //由于i是let生命的,当前的i只在本路循环有效。所以每一次循环的i其实都是一个新的值,所以输出6;

            //不存在变量提升
            //console.log(foo);    //referunceError;
            //typeof foo;    //typof 不在安全
            let foo = 2;

            //暂时性死区
            //只要块级作用域存在let命令,他声明的变量就绑定这个区域,不受外界影响
            var tmp = 123;
            if(true){
                //tmp = 'abc';    //referernceError
                let tmp;
            }

            //暂时性死区
            if(true){
                //死区开始
                //tmp2 = 'abc';    //ReferenceError
                //console.log(tmp2);    //ref

                let tmp2;    //死区结束
                console.log(tmp2);
                tmp2 = 123;
                console.log(tmp2);
            }

            function bar(x = y , y = 2){
                return [x , y];
            }
            //由于x = y,而y没有声明,属于死区
            //bar();    //y is not defined

            function bar2(x = 2 , y = x){
                return [x , y];
            }

            console.log(bar2());    //[2,2]

            //不允许重复声明
            if(true){
                let a = 10;
                //var a = 1;    //has oready been declared
            }

            if(true){
                let a = 10;
                //let a = 10;    //baocuo
            }

            //不许再函数内部重新声明参数
            var func = function(args){
                let args; //报错
            }
            func(1)
            var func2 = function(args){
                {
                    let args;    //不报错
                }
            }
            func2(1);
        </script>
    </body>
</html>

es6 let的更多相关文章

  1. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  2. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  3. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  4. ES6(块级作用域)

    我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...

  5. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  6. ES6之变量常量字符串数值

    ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...

  7. ES6之let命令详解

    let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...

  8. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  9. ES6+ 现在就用系列(二):let 命令

    系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...

  10. ES6+ 现在就用系列(一):为什么使用ES6+

    系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...

随机推荐

  1. G - 非常可乐

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Pract ...

  2. maven打包不执行测试用例

    在执行maven打包时不需要执行测试用例,使用如下2种方式实现:-DskipTests=true : 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下 ...

  3. mac下获取应用签名

    查看md5和SHA1: universalbroker.jks为签名文件 keytool -list -v -keystore universalbroker.jks 微信分享和登录平台需要去掉冒号的 ...

  4. python正则表达式

    group 组是通过 "(" 和 ")" 元字符来标识的. "(" 和 ")" 有很多在数学表达式中相同的意思:它们一起 ...

  5. Egit Patch

    Git为我们提供了Patch功能,Patch中包含了源码更改的描述,能够应用于其他Eclipse工作空间或者Git仓库.也就是说,可以将当前提交导出至其他分支或者项目中.   举个例子,项目A.B中使 ...

  6. java异常知识点整理

    异常处理机制:捕获异常(try-catch-finally)和声明抛弃异常(throw); 所有的异常类都直接或者间接地继承于Throwable类: java异常分为可查异常和不可查异常两种.可查异常 ...

  7. JavaScript知识点

    Day 01 1.Javascript 概述 1.什么是Javascript (JS) Javascript 是一种运行于 JS解释器/引擎 中的解释型脚本语言 JS解释器/引擎 :JS运行环境 1. ...

  8. AT指令(转)

    资料来自网络 附录AT指令简编一. 一般命令1.AT+CGMI 给出模块厂商的标识.2.AT+CGMM 获得模块标识.这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900) ...

  9. Linux任务计划

    Linux任务计划: 一次性任务执行(at.batch): at:定时任务,指定一个时间执行一个任务,只能执行一次. at使用方式: 交互式:让用户在at>提示符输入多个要执行的命令: 批处理: ...

  10. CSS定位类型

    在CSS里面布局是相当重要的,二在这一周了,学习了一些定位,很少用到,用了更好的方式浮动.BFC.IFC等去解决问题. 而也我也对定位的概念不那么熟练运用. 初步的定位类型 1.静态定位(static ...