ES6 let 与 const 与 var
ES 6 是什么?
- ECMA Script 6(简称ES6)是JavaScript语言的最新一代标准。因为 ES6 是在2015年发布的,所以又称ECMAScript 2015。
- ECMAScript 是由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过 ECMA-262 标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展。
- 最常用的ES6特性
- let, const,
- class, extends, super, arrow functions, template string, destructuring, default, rest arguments
- Java定义变量有三种方式,最传统古老的 var、以及 ES 6 新增的 let、const
- var定义变量的方式现在慢慢的开始舍弃
var
- var 变量无块范围,最小可见范围是函数级。
- var 变量申明被提升至函数顶部。
- var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
示例 1:var 定义的是全局变量或函数变量,没有let块区域变量的概念,var可以越过块区域
<script type="text/javascript"> /**var没有块区域,仅为全局或函数区域,可以越过块区域*/ if (true) { var flag = true; } /**上面的if、以及while、for等都属于块区域,var是可以无视的 * 所以这里会输出"true"*/ console.log(flag);//输出true </script>
<script type="text/javascript"> $(function () { for (var i = 0; i < 5; i++) { console.log("inner:"+i); } /**var定义的全局变量,此时照样能读到for中的i值*/ console.log("outer:"+i);//输出"outer:5" }); </script>
<script type="text/javascript"> function show(){ var userName = "芷若";//这个userName属于函数级别变量 console.log(userName); } /**上面方法中定义的变量,只会在方法中有效,此时下面报错: * letAndVar.html:13 Uncaught ReferenceError: userName is not defined*/ console.log(userName); </script>
示例2 :var定义的变量可以先使用,再声明,但不建议这么做,实际开发中应该先声明再使用
<script type="text/javascript"> /**输出变量在声明变量之前,结果为undefined,等价于下面三句 * var age; * console.log(age); * age = 13; * */ console.log(age);//输出undefined var age = 13; /**如果输出的变量前后都未使用var声明,则运行时报错: * Uncaught ReferenceError: userName is not defined */ console.log(userName); </script>
let
- let 声明的变量,只在let命令所在的代码块内有效,即只在{}内有效,它的粒度比var更细腻
- let 用法与 var 相同,区别主要在于作用范围不一样,性能上let比var更强
- let是块级作用域,函数内部使用let定义后,对函数外部无影响。
示例 1:let定义的变量只在局部的{}中有效,所以不会和外面的发生冲突, 如果换成var定义显然里面的会覆盖外面的,更容易出错
<script type="text/javascript"> $(function () { for (let i = 0; i < 3; i++) { console.log("outer:"+i); /**let定义的变量只在局部的{}中有效,所以下面并不会和外面的i冲突 * 如果换成var定义显然里面的会覆盖外面的,更容易出错*/ for (let i = 0; i < 3; i++) { console.log("innner:"+i); } } }); </script>
示例2:let声明的变量未赋值时,默认为undefined
<script type="text/javascript"> /**声明了userName,但未赋值时,输出undefined*/ let userName; console.log(userName);//输出undefined /**直接使用未声明的变量时,直接报错: * Uncaught ReferenceError: age is not defined*/ console.log(age); </script>
const
-
const
用来声明常量,声明的同时必须初始化值,否则运行时浏览器报错; - const 声明且初始化值之后,常量的值就不能改变,否则直接编译不通过
<script type="text/javascript"> $(function () { /**声明常量的时候必须初始化值*/ const PI = Math.PI; console.log(PI);//输出:3.141592653589793 /**如果常量E声明的同时没有初始化值,则运行时浏览器报错: * Uncaught SyntaxError: Missing initializer in const declaration*/ const E; }); </script>