ES 6写法ES6

深入理解ES6之块级绑定

2018-11-18  本文已影响2人  紫陌于微

说在前面

开始学习深入理解ES6这本书,有些在看以前的ES6的书本时未理解的东西在逐渐解惑,记录一下,也算是一种别样的收获

块级作用域、块级绑定及js

任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。


var声明与变量提升

es5使用的最多的是var声明,它的特性

console.log(s); //undefined
var s; 
if(true) {
  var s = 4
  console.log(s);//s = 4
} 
console.log(s);//s = 4,可访问

es6的块级声明

let

与var相近的‘块级’变量

if(true) {
let p = 4;
console.log(p);//4
} 
console.log(p );//Uncaught ReferenceError: p is not defined
var K = 5;
let K;//Uncaught SyntaxError: Identifier 'K' has already been declared, 已经声明过
let l = 3;//undefined
l = 4//4,重新赋值未报错
console.log(j);
let j;
 //Uncaught ReferenceError: j is not defined

const

es6新增的常量声明

const n = 3;
 n= 4;//Uncaught TypeError: Assignment to constant variable
var n = 6;//Uncaught SyntaxError: Identifier 'n' has already been declared
const e ;//Uncaught SyntaxError: Missing initializer in const declaration

块级声明特性

暂时性死区( temporal dead zone , TDZ)

 typeof l;
 let l = 5;//Uncaught SyntaxError: Identifier 'l' has already been declared

块级循环

for (var i = 0; i < 10; i++) {
  process(items[i]);
}
// i 在此处仍然可被访问
console.log(i);
for (let i = 0; i < 10; i++) {
  process(items[i]);
}
// i 在此处不可访问,抛出错误
console.log(i);

全局绑定

var在全局中声明的变量,与window对象下面所有的属性是一致的,但是let与const,不会在window下面创建该属性,即两者是不能互通的

 var wm = '3334';
window.wm//"3334"
let wy = 'ppp';
window.wy//undefined

所以若想让代码能从全局对象中被访问,你仍然需要使用 var :在浏览器中跨越帧或窗口去访问代码时,这种做法非常普遍。


最佳实践

上一篇 下一篇

猜你喜欢

热点阅读