浅谈ES6 let命令
来源:互联网 发布:软件项目风险管理计划 编辑:程序博客网 时间:2024/06/05 15:47
对let命令的理解
(a)基本用法介绍
ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
自己的理解,let跟 var 变量声明,不同的是,let不会导致变量提升,而var会,这也就是let的好处(ES6个人觉得底层就是使用闭包封装的)。例如:
var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10a[7](); // 10//不信你可以试试看,答案为什么会是10呢?其实底层就是封装的闭包而已。var a = [];for (var i = 0; i < 10; i++) { a[i] = function (num) { return function(){ console.log(num); } }(i);}a[6](); // 6a[7](); // 7
这也就是ES6中所谈论的,变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值为10。就像ES6中,往下看(b)不存在变量提升。
(b)不存在变量提升
let不像var那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。
看代码说话:
console.log(foo); // 输出undefinedconsole.log(bar); // 报错ReferenceErrorvar foo = 2;let bar = 2;
(c)暂时性死区
var tmp = 123;if (true) { tmp = 'abc'; // ReferenceError let tmp;}
上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
(d)不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。
function () {// 报错 let a = 10; var a = 1;}function () {// 报错 let a = 10; let a = 1;}因此,不能在函数内部重新声明参数。function func(arg) { let arg; // 报错}function func(arg) { {let arg; // 不报错 }}
额外:
1、const关键字的深度用法
详细地址:http://blog.csdn.net/js_xj/article/details/5867263
自己的理解,const关键字是一个常量,只是初次声明,后期不能再次赋值。例如:
const num = 123;num = 234;console.log(num);//123
2、prototype 属性
函数定义的时候函数本身就会默认有一个prototype的属性,而我们如果用new 运算符来生成一个对象的时候就没有prototype属性。我们来看一个例子,来说明这个,例如:
function a(c){ this.b = c; this.d =function(){ alert(this.b); }}var obj = new a('test');alert(typeof obj.prototype);//undefinealert(typeof a.prototype);//object详细请查阅: http://www.cnblogs.com/yupeng/archive/2012/04/06/2435386.html
- 浅谈ES6 let命令
- js es6 let命令
- ES6中let命令
- 【ES6】let 命令
- ES6(ECMAScript 6 ) let命令
- es6 let与constant命令
- es6 let 和 const 命令
- ES6之let命令妙用
- ES6 let和const命令
- 工作日常--浅谈ES6的let/const
- ES6学习--let和const命令
- 自学-ES6篇-let和conts命令
- ES6篇let和conts命令
- ES6(一) let和const命令
- es6学习-let和const命令
- ES6学习笔记: let 和 const 命令
- ES6 之 let 和 const 命令
- ES6的let命令(二)
- 消息中间件与JMS
- Oral Presentations: Tips on How to Deliver a Speech for School or Work
- -[UIWindow endDisablingInterfaceAutorotationAnimated:]
- 模板类和友元函数再探
- [LeetCode]Longest Increasing Subsequence
- 浅谈ES6 let命令
- 翻转格子poj 1753
- Sharepoint 轻量化应用构建之熟悉Sharepoint Designer 2013!
- a标签加入单击事件 屏蔽href跳转页面
- json get请求 img src 带 中文 解决
- 转载自大牛的博文-解决大批量插入数据到数据库中的问题
- 内容提供器(Content Provider)--跨程序共享数据
- 位运算——用位存储40亿个40亿以内的整数
- 网络编程---Socket编程