es6 let

<!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>
时间: 2024-08-25 05:44:31

es6 let的相关文章

es6学习 -- 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数组进行解构的例子. 我认为

ES6之主要知识点(六)数组

引自http://es6.ruanyifeng.com/#docs/array 1.扩展运算符(...) 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. 该运算符主要用于函数调用. function push(array, ...items) { array.push(...items); } function add(x, y) { return x + y; } var numbers = [4, 38]; add(...n

ES6简介

概述 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布,也叫ES2015. 语法提案的批准流程 新的语法从正式提案到正式成为标准,需要经历5个过程. Stage 0 - Strawman(展示阶段) Stage 1 - Proposal(征求意见阶段) Stage 2 - Draft(草案阶段) Stage 3 - Candidate(候选人阶段) Stage 4 - Finished(定案阶段) 一个提案进入Stage 2

es6的一些基本语法

首先说一下什么是es6: ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准; let 和 const 命令 let的基本用法: 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调用这两个变量,结果let声明的变量报错, var声明的变量返回了正确的值.这表明,let声明的变量只在它所在的代码块有效. const的基本用法: const声明的是一个常量,不能被修改,所以第二次声明后会报错! 数组的解构赋值: 之前最基本的写法是这样

js的ES6特性

一. let和const关键字 let出现之前,js所有的作用域都是以函数为单位的,只要在一个function里声明的var, 无论是for循环等块里面声明的还是在块外面声明的,整个function都可以使用这个var,比如: function foo() { for (var i=0; i<100; i++) { // } i += 100; // 仍然可以引用变量i } 我个人的理解是js的提升特性,函数会将里面声明的所有var都提升到函数开始的地方,所以整个函数内都共享这些var. let

Atitit js es5 es6新特性 attilax总结

1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 基本chrome ff 360se8全面支持了2 2. ECMAScript 2015(ES6)的十大特征 – WEB前端开发 - 专注前端开发,关注用户体验.html2 1.1. JavaScript发展时间轴: 1.1995:JavaScript诞生,它的初始名叫LiveScript. 2.1997:ECMAScript标准确立. 3.1999:ES3出

30分钟掌握ES6核心内容

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,可以将

ES6之块级作用域

一.前言 在ECMAScript6(以下简称ES6)之前,ECMAScript的作用域只有两种: 1.  全局作用域: 2.  函数作用域. 正是因为有这两种作用域,所以在JavaScript中出现一术语--“变量提升(hoisting)”. 如下: function func(){ console.log(test); var test = 1; }; func(); 在node环境执行上述代码,结果为: 之所以为’undefined’,原因就在于‘变量提升’,在进入func函数时,将所有通过

[ES6] 03. The let keyword -- 1

var message = "Hi"; { var message = "Bye"; } console.log(message); //Bye The message inside the block still has impact on the outside. If you add function around the inside message: var message = "Hi"; function greeting(){ va

Es6中如何使用splic,delete等数组删除方法

Es6中如何使用splic,delete等数组删除方法 1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   /