振作精神,努力更新!
先定个小目标,每周更新3篇内容!
本周:2022 - 06 - 06 ~ 2022 - 06 - 12 ( 第三篇 )
let 命令:
-
存在块级作用域
-
不存在变量提升
-
暂时性死区
-
不允许重复声明
-
不自动挂载到window
块级作用域:
无块级作用域场景:
-
内层变量可能会覆盖外层变量
var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = 'hello world'; } } f(); // undefined
-
用来计数的循环变量泄露为全局变量
ES6 块级作用域:
ES5 不允许在块级作用域声明函数;
但浏览器未遵守 该规定;
ES6 允许在块级作用域声明函数;
行为类似于let
声明的变量;
但浏览器可以不遵守;
function f() {
console.log('I am outside!');
}
(function () {
// ES6 环境下,行为像添加了:
// var f = undefined
if (false) {
function f() {
console.log('I am inside!');
}
}
f();
}());
// Uncaught TypeError: f is not a function
应避免在块级作用域声明函数;
实在需要,应 优先使用函数表达式:
{
let fn = function () {}
}
const 命令:
-
一个只读的常量
-
声明后必须初始化赋值
-
其他性质类似
let
冻结对象:
const foo = Object.freeze({});
声明变量方法:
var let const function import class