理解var、let和const
// 参考 es6阮一峰 [添加链接描述](https://es6.ruanyifeng.com/#docs/let)
//1 var 变量使用在声明之前代码不会出错,全局声明
try {
console.log(a) // undefined
var a =1
}catch (e){
console.log(e)
}
console.log(window.a === a) // true
//2 let es6新的语法 块级作用域,并不是定义在全局中,不能使用在声明之前,在定义在块作用域之外使用报错
let b = 0
console.log(b)
console.log(window.b) // undefine
try {
// console.log(c) // 报错
{
let c = 1
console.log(c) //1
}
// console.log(c) // 报错
}catch (e) {
console.log(e)
}
//3 const 申明常量 作用和let相似,区别定义后不能修改,扩展es5怎么声明常量
try {
const d = 1
d = 2 // Assignment to constant variable.
}catch (e) {
console.log(e);
}
// 取代iife
(function (){
var a = 10
}())
console.log(a)
// 允许在块级作用域内声明函数。
// 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
// 同时,函数声明还会提升到所在的块级作用域的头部。
function f() {
console.log('I am outside!'); }
(function () {
function f() {
console.log('I am inside!'); }
if (false) {
}
f();
}());
// 考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。