ES6新增了let命令,用来声明变时量。

它的用法类似于var 但是所声明的变量,只在let命令所在的代码块内有效。

//

for(let i = 0; i<10 ;i++ ){

console.log(i);//可以输出,此时的i是向它的父级作用域查询的到的。

}

console.log(i);//RefernceError: i is not defined;

//

//

for(let i = 0;i<3;i++){

// let i = "abc";

let i= "as";//又声明了一个let类型的i;

// var i = 0; //此时就会报错 因为var申明会提升。实际上执行顺序为下列代码。

console.log(i);

}

//

//

for(let i = 0; i<3 ; i++){

var i;//我们这里又声明了一个变量为i的申明;在es6里我们规定不允许重复申明一个变量。

i = "as";

console.log(i);

}

//

//

var tmp = new Date();

function f(){

console.log(tmp);

if(false){

let tmp = "hello world";//由于let没有申明提前

}

}

f();//所以我们得到var申明的tmp;

//

var tmp = new Date();

function f(){

console.log(tmp);

if(false){

var tmp = "hello world";//由于var有申明提前

}

}

f();// 所以我们得到的是一个undefined;

//实际上运行的函数应该是这个样子的。

var tmp = new Date();

function f(){

var tmp; //undefined;

console.log(tmp);

if(false){

tmp = "hello world";//由于var有申明提前

}

}

f();// 所以我们得到的是一个undefined;

//

由于let方法的特殊性,所以我们会产生如下介绍的几个特殊的属性;

function bar( x = y; y = 2){

return [x,y];

}

bar();//报错

//产生的原因就是我们产生了死区;调用bar()时,我们的参数x默认值等于另外一个参数y,而y此时还没有被申明,属于“死区”。如果我们把上面参数的位置调换一个下就不会报错,因为x是申明的。

function bar(x = 2; y = x){

return [x,y]

}

bar();//[2,2]

//

var x = x;//不会报错,因为提前声明。

let x = x;//报错,因为let不会提前声明。、

个人认为let使用的好处:

1 可以减少很多运行的错误。

2 比较对内存友好,省出来很多空间,即用即毁。

3 由于块级作用域,使代码更加明确增加可读性。减少很多不必要的麻烦。

如果有更多好处,留言版主。让更多萌新看到。

const 用来声明一个可读的常量。一旦申明就不能改变。

申明的常量是被保存在栈中的。

所以在实际上我们有时候可以通过操作堆来修改这个常量的值。但是我们一般不去这么做。

比如:

const arr = [1,2,2,3];

arr.push(5);

console.log(arr);//[1, 2, 2, 3, 5]

//

const命令申明的常量不提升的,同样存在暂时性死区,只能在申明的位置后面去使用。

var message = "Hello!";

let age = 25;

// 以下两行都会报错

const message = "Goodbye!";

const age = 30;

const 声明的常量,也与 let 一样不能够重复申明。

本质

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

ES6 声明变量的六种方法

ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法

ES6新增了let命令,用来声明变时量。它的用法类似于var 但是所声明的变量,只在let命令所在的代码块内有效。//for(let i = 0; i<10 ;i++ ){console.log(i);//可以输出,此时的i是向它的父级作用域查询的到的。}console.log(i);//RefernceError: i is not defined;////for(let i = 0;i<3;i++){// let i = "abc"; let i= "as";//又声明了一个let类型的i;// var i = 0; //此时就会报错 因为var申明会提升。实际上执行顺序为下列代码。console.log(i);}////for(let i = 0; i<3 ; i++){var i;//我们这里又声明了一个变量为i的申明;在es6里我们规定不允许重复申明一个变量。i = "as";console.log(i);}////var tmp = new Date();function f(){console.log(tmp);if(false){let tmp = "hello world";//由于let没有申明提前}}f();//所以我们得到var申明的tmp;//var tmp = new Date();function f(){console.log(tmp);if(false){var tmp = "hello world";//由于var有申明提前}}f();// 所以我们得到的是一个undefined;//实际上运行的函数应该是这个样子的。
var tmp = new Date();function f(){var tmp; //undefined;console.log(tmp);if(false){tmp = "hello world";//由于var有申明提前}}f();// 所以我们得到的是一个undefined;//
由于let方法的特殊性,所以我们会产生如下介绍的几个特殊的属性;function bar( x = y; y = 2){return [x,y];}bar();//报错//产生的原因就是我们产生了死区;调用bar()时,我们的参数x默认值等于另外一个参数y,而y此时还没有被申明,属于“死区”。如果我们把上面参数的位置调换一个下就不会报错,因为x是申明的。function bar(x = 2; y = x){return [x,y]}bar();//[2,2]//var x = x;//不会报错,因为提前声明。let x = x;//报错,因为let不会提前声明。、
个人认为let使用的好处: 1 可以减少很多运行的错误。 2 比较对内存友好,省出来很多空间,即用即毁。 3 由于块级作用域,使代码更加明确增加可读性。减少很多不必要的麻烦。 如果有更多好处,留言版主。让更多萌新看到。
const 用来声明一个可读的常量。一旦申明就不能改变。 申明的常量是被保存在栈中的。 所以在实际上我们有时候可以通过操作堆来修改这个常量的值。但是我们一般不去这么做。 比如: const arr = [1,2,2,3]; arr.push(5); console.log(arr);//[1, 2, 2, 3, 5] // const命令申明的常量不提升的,同样存在暂时性死区,只能在申明的位置后面去使用。 var message = "Hello!";let age = 25;
// 以下两行都会报错const message = "Goodbye!";const age = 30;const 声明的常量,也与 let 一样不能够重复申明。
本质const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。ES6 声明变量的六种方法ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6 一共有 6 种声明变量的方法

let申明与const申明的更多相关文章

  1. var,let,const,三种申明变量的整理

    javascript,正在慢慢变成一个工业级语言,势力慢慢渗透ios,安卓,后台 首先let,是局部变量,块级作用域:var全局的,const是常量,也就是只读的: 一行demo说明 for (var ...

  2. OC中修饰符:宏define 常量:const extern

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

  3. EffectiveC#2--为你的常量选择readonly而不是const

    1.对于常量,C#里有两个不同的版本: 编译时常量--效率相比更高些,但可维护性不好,保留的目的是为了性能.const关键字申明 public const int _Millennium = 2000 ...

  4. 关于const限定符

    1.  指向非常量数据的非常量指针 具有最高的数据访问极限 .不包含const关键字. 2. 指向常量数据的非常量指针 指针可以被改写,使其指向相应类型的任何数据项, 但是它所指向的数据项的值是不能被 ...

  5. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  6. es6(一):es6介绍以及let,const

    es是js的规范,而js是具体实现 将es6转化为es5代码工具:运用的多的是babel 在线转换地址:babel,traceur(属于谷歌)   1.let申明变量:let其实可以完全取代var,并 ...

  7. ES6简介之let和const命令解说

    一.var申明变量 学习过JavaScript的同学都应该知道,ES5中申明变量使用var,ES5中的var可以说是无所不能的,所有类型的变量都是由var来申明,但往往很多使用者不知道var申明的变量 ...

  8. objectiveC【语法】修饰符 static extern const

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

  9. ZT 初始化 const 成员和引用类型成员(C++)

    初始化 const 成员和引用类型成员(C++) 初始化 const 成员和引用类型成员的问题,在 C++ 教材中讲述初始化列表的章节应该都有讲过,但是因为平时用得少,所以可能有不少人没注意到.待到用 ...

随机推荐

  1. 死磕nginx系列--nginx 目录

    死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...

  2. wifi 安卓手机

    通过wifi向服务器端发送数据 https://www.cnblogs.com/zhaoxinshanwei/p/3573813.html http://www.hx-wl.com.cn/51wifi ...

  3. go标准库的学习-strings-字符串操作

    参考https://studygolang.com/pkgdoc 导入方式: import "strings" strings包实现了用于操作字符的简单函数. 常用的几个函数: f ...

  4. Spring Boot + Mybatis多数据源和动态数据源配置

    文章转自 https://blog.csdn.net/neosmith/article/details/61202084 网上的文章基本上都是只有多数据源或只有动态数据源,而最近的项目需要同时使用两种 ...

  5. 一加将在欧洲推出第一款商用 5G 手机

    远在太平洋中部的夏威夷群岛,高通举办了骁龙峰会. 峰会的惯例,各行业的合作伙伴都被邀请上台演讲.中国企业里,去年来的是小米雷军,而今年刚开场,一加手机 CEO 刘作虎就现身了. 与以往一样,张老板身着 ...

  6. Linux命令——cat/less/more的区别

    cat命令:用于显示整个文件的内容,单独使用没有翻页功能,经常和 more 命令搭配使用,cat 命令还可以将数个文件合并成一个文件. more命令:让画面在显示满一页时暂停,此时可按空格健继续显示下 ...

  7. MySQL(十三)事务处理和字符集

    一.事务处理 事务处理(transaction processing):是一种机制,用来维护数据库的完整性,管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果. 这样可以保证一组操作 ...

  8. GIT 分支管理:多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  9. Luogu3516 POI2011 Shift 构造

    传送门 题意:给出一个长为$N$的排列,有两种操作:$A$:将最后一个数字放到第一个:$B$:将第三个数字放到第一个.一次性使用某种操作$k$次写作$kA$或$kB$,其中在$kA$中$k < ...

  10. LiveCharts文档-3开始-7标签

    原文:LiveCharts文档-3开始-7标签 LiveCharts文档-3开始-7标签 Label就是Chart中表示数值的字符串,通常被放置在轴的位置和提示当中. 下图中的这些字符串显示的都是标签 ...