ES6系列一 let const

一丶let

1.使用let声明一个变量,会生成一个独立的作用域,比var的作用域更为严谨,比如for循环

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

2.暂时性死区:在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

3.不能重复性声明: 同一作用域下,var重复声明不会报错,let和const重复声明会报错。

二丶const

1.const声明一个只读变量,不可更改值,否则则会报错,但对象和数组可以更改内存指针。比如

const foo = {};

// 为 foo 添加一个属性,可以成功
foo.prop = 123;
foo.prop // 123
const a = [];
a.push(‘Hello‘); // 可执行
a.length = 0;    // 可执行
a = [‘Dave‘];    // 报错
				
时间: 2024-10-11 11:43:07

ES6系列一 let const的相关文章

[ES6系列-04]再也不乱“哇”了:用 let 与 const 替代 var

[原创]码路工人 Coder-Power 大家好,这里是码路工人有力量,我是码路工人,你们是力量. github-pages 博客园cnblogs 今天的内容是,关于 JavaScript 中定义变量的变化(其实不确切,函数,常量表示被冷落). 首先,回顾下 var 定义存在的问题 1. 哇..var 好乱.. 1.1 可以重复定义 /* eg.0 * multi-definition of var-variable */ //----------------------------------

es6学习 -- let和const

在es6中let和const声明的变量都只能在其声明的块级作用域中使用,所谓的块级作用域就是{}这么一对大括号. 为什么需要块级作用域? ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景. 第一种场景,内层变量可能会覆盖外层变量. var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = 'hello world'; } } f(); // undefined 上面代码的原

[js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解

接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般都有Symbol.iterator属性,你可以在控制台中用console.dir打印数组,Map,Set,在他们的原型对象(prototype)上面就能找到.这个属性与迭代器密切相关,通过该函数可以返回一个迭代器,下文,我会举一个例子.一般来说所有的集合对象(数组,Set,Map 以及字符串)都是可

ES6入门-let和const指令

LET: 基本用法:在javascript中声明一个变量通常使用var ,在es6中新增了let指令,用法类似var ,但是let声明的变量只能在所在的代码块有效. ??  使用let声明变量要注意一下几个点: 1,let指令不存在变量提升,所以变量一定要先声明后再使用,否则就会报错. console.info(info); //ReferenceError let info; 2, 存在暂时性死区,也就是说,只要一个块级作用域中使用let声明了某个变量,那么这个变量就被绑定在这个区块了.外界对

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

es是js的规范,而js是具体实现 将es6转化为es5代码工具:运用的多的是babel 在线转换地址:babel,traceur(属于谷歌) 1.let申明变量:let其实可以完全取代var,并且没有var这么多副作用 1 { 2 var a = 10; 3 let b = 10;//let申明的变量是块级作用域 4 } 5 console.log(a)//10 6 // console.log(b)//b is not defined let很适合的一种场景是:for 1 for (let

ES6 系列之异步处理实战

前言 我们以查找指定目录下的最大文件为例,感受从 回调函数 -> Promise -> Generator -> Async 异步处理方式的改变. API 介绍 为了实现这个功能,我们需要用到几个 Nodejs 的 API,所以我们来简单介绍一下. fs.readdir readdir 方法用于读取目录,返回一个包含文件和目录的数组. fs.stat stat 方法的参数是一个文件或目录,它产生一个对象,该对象包含了该文件或目录的具体信息.此外,该对象还有一个 isFile() 方法可以

[js高手之路] es6系列教程 - var, let, const详解

function show( flag ){             console.log( a );             if( flag ){                 var a = 'ghostwu';                 return a;             } else {                 console.log( a );                 return null;             }         } 我们从e

ES6系列,1.新增let和const命令

由于ES5只有全局作用域和函数作用域,因此ES6增加块级作用域. let用于定义变量,块级作用域,for循环建议使用let: let会引起变量提升,必须先声明,在调用: let声明的变量,不允许重复声明: let实际是创建了块级作用域,可以变成do表达式 例:let x = do { let t = f(); t * t + 1; }; 上面代码中,变量x会得到整个块级作用域的返回值. const变量定义常量,一旦定义,不可以修改: const一旦声明变量,就必须立即初始化,不能留到以后赋值:

Es6系列--const

const是用来定义常量,一旦声明,其值就不能改变 const声明的常量不得改变值.这意味着,const一旦声明常量,就必须立即初始化,不能留到最后赋值.  const的作用域与let相同:只在声明所在的块级作用域内有效 const变量也不会提升,同样也存在暂时性死区,只能在声明后使用. 与let一样,const也不可以重复声明变量. 对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址.const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非