ES6学习之let声明变量的学习

1.let和var类似,

(1)let与var不同的let没有预编译,变量提升这个过程,let声明的变量只能在当前作用域内访问到(一个{}可以看做是一个作用域)

 let a = 12;
    (function () {

        console.log(a);  
        let a = 5;
    }());

    可见上面代码中是会报错的,如果a是var声明的,那么就不会报错、输出a的值是undefined

(2)虽然说let声明的变量不允许重复声明,但是在for循环中貌似又是可以的

 for (let i = 0; i < 10; i++) {
        let i = "abc";
        console.log(i);    //这里输出的是abc
    }

    上面for声明i的小括号可以看做是一个父级作用域,{}执行体可以看做是子级作用域,具体for为什么可以重复声明我也不是很清楚。。

(3)块级作用域{},在es6当中引入块级作用域,每个{}都属于一个块级,然而每个块级的中的变量都是相互隔离的访问不到的

//块级作用域
    {
        let ooo = 13;
        {
            let ooo = 18;
            console.log(ooo);    //18
        }
        console.log(ooo);    //13
    }

    

{
        let ooo = 13;
        {

            console.log(ooo);  //报错 (此处为死区)
            let ooo = 12;
        }
        console.log(ooo);
    }   

(4)let关键字和var关键字在for中的区别

 var arr = [];
    for (var i = 0; i < 10; i++) {
        arr[i]=function(){
            console.log(i);
        }
    }
    arr[6]();       //输出的是10    

    var arr = [];
    for (let i = 0; i < 10; i++) {
        arr[i]=function(){
            console.log(i);
        }
    }
    arr[2]();       //输出的是2

    for循环中用var声明的最后输出的是10大家应该都是知道。因为在函数执行的时候i已经变成10了而为什么let声明的却不是10呢,是因为let声明的变量只在本轮循环有效,所以每一次循环i都是一个新的变量,所以最后输出的是6。有点疑惑的是,如果说每次i都是重新声明的,那怎么知道上一轮循环的是多少,从而计算出本轮循环的值?这是因为JavaScript引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

原文地址:https://www.cnblogs.com/heheblog/p/JavaScript_study_let.html

时间: 2024-10-09 15:29:27

ES6学习之let声明变量的学习的相关文章

ES6中6种声明变量的方法

ES5 只有两种声明变量的方法:var命令和function命令. ES6 除了添加let和const命令,还有两种声明变量的方法:import命令和class命令. 所以,ES6 一共有 6 种声明变量的方法. (1) var命令. var a ; //undefined var b = 1; var定义的变量可以修改,如果不初始化会输出undefined,不会报错 var 声明的变量在window上,用let或者const去声明变量,这个变量不会被放到window上 很多语言中都有块级作用域

ES6学习之const声明常量的学习

在ES中const关键字用来声明常量,与C#中的类似 const声明的一经定义不能修改 和let特性差不多, const a = 13; console.log(a); a = 5; //报错 const定义完常量后必须赋值,后面不允许再次赋值 const aa; const b; //报错 const定义完后,必须赋值,后面不允许赋值 b=5; alert(b): const c = 12; (function () { console.log(c); //死区 访问不到 const c =

17、内置变量、特殊变量、字符操作、声明变量 学习笔记

1.bash的内置变量 $PATH            环境变量路径 $HOSTNAME        系统主机名 $UID             系统当前用户ID $HISTFILE        历史文件存放路径 $HISTSIZE        系统可以保存的历史记录条目数 $HISTFILESIZE    历史文件可以保存的历史记录条目数 $HISTCONTROL     历史命令显示控制 $BASH            bash二进制程序文件的路径 $BASH_SUBSHELL 

VBScript学习笔记 - 作用域,变量显式声明

<p>在脚本主体中声明或创建一个变量时,默认是全局作用域(global scope)的:而在函数或子例程中定义的变量,默认是私有作用域(private scope)的.</p><p>要显式声明变量的作用域,可用public语句和private语句</p><div class="cnblogs_code" style="border-top: #cccccc 1px solid; border-right: #cccccc

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex语言和java很多的语法类似,今天总结的是一些简单的Apex的变量等知识. 有如下几种常用的基本变量Integer,String,Decimal,Double,Long,Boolean,ID. 集合常用的对象:List<T>,Set<T>,Map<T>. 时间日期常用对象:Datetime,Time,Date. 其他:Object,sObject(与数据库相关

Python学习笔记1(变量,字符编码)

跟着老男孩教育Alex的视频学习Python,写博客记录自己的学习过程,记录所讲授的知识点. 此篇微博直接从学习一个程序的仪式感"Hello word"开始写起,例如Python的介绍.发展史.Python2和3的区别.安装.优缺点等,将不会在此记录. 这是我第一次编写博客,不管是内容总结还是外观形式都肯定会有所欠缺.不过这博客主要是给自己记录学习过程的,如果想自学的话,在此推荐给你Alex金角大王和Eric银角大王的微博. 金角大王传送门:http://www.cnblogs.com

Scala系统学习(四):Scala变量

变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变量中存储整数,小数或字符. 变量声明 Scala具有用于声明变量的不同语法.它们可以被定义为值,即常数或变量. 这里,myVar使用关键字var声明. 它是一个可以改变值的变量,这称为可变变量. 以下是使用var关键字定义变量的语法 - 语法 var myVar : String = "Foo&qu