明天有工夫又看了一下es6的语法,略微做了一点总结,便于日后查阅:
let / const 申明变量,一下所讲的所有的特点都是相较于var来说的
var:
1:变量晋升: var/function 申明的变量会被晋升到它的调用之前 console.log(aa); //undefined var aa; ==等价于== var aa; console.log(aa); //undefined aa = 12; console.log(aa); //12 2: 全局作用域 / 函数作用域 函数外部能够拜访全局作用域的变量,大那是全局作用域只能够拜访全局变量,
let 特点:
1 . 不存在变量的晋升 console.log(bb); //报错 let bb;2 . 暂时性死区 在一个块级作用域内申明的变量就会绑定在这个区域内了,在let没有申明变量之前这个变量都是不可用的 1) : console.log(aa); // 报错 let aa; 2) : function fn(aa){ let aa; } fn();// 报错,aa曾经申明过了,这也阐明了函数的参数实是在这个函数外部申明一个变量 3) : function bar(x = y, y = 2) { return [x, y]; } bar(); // 报错 在赋值x = y 的时候,y 还没有被申明. //function bar(x = 2, y = x) { // return [x, y]; //} 这样是可行的 3 . 不容许反复申明;在同一个块作用域( "{ }" )内不能够反复申明同一个变量 1) : let aa = 1; let aa; console.log(aa); //报错, aa曾经申明 2) : function fn(bb){ let bb; } fn();//报错 ,bb 曾经申明 4 . 块级作用域 会计作用域外部能够拜访蕴含它的组用域内的变量,然而却不能拜访蕴含于它的块级作用域的变量 let tmp = "hello"; //console.log(aa); //找不到aa //console.log(bb); //找不到bb function f() { console.log(tmp); //hello //console.log(bb); //找不到bb let aa = 123; if (true) { let bb = 567; console.log(tmp); //hello console.log(aa); //123 } } f();
const 特点:
根本以let是统一的,只有一点const申明的变量是只读的,一但申明就必须初始化(赋值),边切前面也不能够在从新赋值