1.block是什么?
block是块语句(或者说复合语句)用于组合零个或者多个语句,该块由一对大括号{}界定
块声明: {StatementList}
2.块级作用域是什么?
在非严格模式下var或者函数声明时,通过var声明的变量或者非严格模式下创建的函数是没有块级作用域的。
举个例子:
var x = 1;
{
var x = 2;
}
console.log(x); //输出的是2,因为var没有块级作用域这么一说
而
let x = 1;
{
let x = 2;
}
console.log(x); //输出的则是1,let是有块级作用域的
3.let 和 const的比较
let和const都是有块级作用域的,如下所示:
如果没有块级作用域,输出的就是2了,因为有块级作用域,所以输出为1。
4.什么是变量提升?
看另一篇博客:变量提升
5.var,let,const的相同点和区别:
var,let,const比较 | 相同点 | 不同点 |
---|---|---|
var | ||
let | ||
const |
-
块级作用域
- var没有,let和const有。
-
初始化
- const定义的变量必须要初始化,且不能被修改
- var定义的变量可以修改,如果不初始化,则为undefined
- let是块级作用域,内部使用let定义后,对函数外部无影响。
-
变量提升
- let/const没有变量提升
- var是有变量提升的
个人理解得很浅显,欢迎批评,指正,谢谢。