1、常量
定义一个常量(不变化的量)
ES5 常量定义一个常量
Object.defineProperty(window,"PI",{
value : 3.1415926,
writable : false,
})
ES6 常量定义一个常量
const PI = 3.1415926 ;
假若代码中有很多地方需要声明常量,通过ES6的方式实现还是比较方便的。
2、作用域
变量的作用域无非就是两种:全局变量和局部变量。
全局作用域: 最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的
局部作用域: 和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的,最常见的例如函数内部
原因:var 定义的变量 i 在for 循环中存在变量的提升 而且循环内是一个闭包函数(最后执行)闭包内并没有声明内部的 i 变量,因此 i 变量从for 循环内声明的全局变量中取得,从全局变量中取得时的 i 是最终计算量。循环结束后 i = 3 执行闭包函数输出都是6
在ES6 新增一个定义变量声明 let 块级作用域 声明的变量每次变化时,会新增不同的作用域块,分开执行代码
使用let声明变量,变量发生变化时,会新增不同的作用域,再通过不同作用域执行闭包函数,输出不同的值。
3、箭头函数 =>
var fun = function(){ ... }
箭头函数: () => { 函数体 }
(参数) => { 函数体 } 如果参数只有一个 小括号可以省略
例如: var fun = (a) => { return a+2; }
函数调用: fun(20);
这样写的好处
1、在写法上更加方便,省去了书写function,比较简单
2、会改变箭头函数内部this的指向,指向的是定义时绑定的this指向(就是this是继承自父执行上下文)