1、块级作用域绑定
块级声明用于声明在指定块的作用域之外无法访问的变量。
块级作用域(亦被称为词法作用域)存在于:函数内部/块中(字符{和}之间的区域)
let 声明变量: 可以把变量的作用域限制在当前代码块中
function getVale(condition){
if(condition){
let value ="blue";
return value;
}else{
// 变量value在此处不存在
return null;
}
//变量value在此处不存在
}禁止重复声明:假设作用域中已经存在某个标识符,此时再使用let关键字声明它就会抛出错误
var count = 30; // 抛出语法错误 let count = 40;
但如果当前作用域内嵌另一个作用域,便可在内嵌的作用域中用let声明同名变量
var count = 30;
if(condition){
// 不会抛出错误
let count = 40;
}const声明:使用const声明的是常量,其值一旦被设定后不可更改。因此,每个通过const声明的常量必须进行初始化
// 声明常量 const maxItems = 30; // 未捕获的SyntaxError:常量声明中缺少初始值设定项 // Uncaught SyntaxError: Missing initializer in const declaration const name;
用const声明对象
const声明不允许修改绑定,但允许修改值。这也就意味着用const声明对象后,可以修改该对象的属性值。
const person = {
name:"Nicholas"
};
// 可以修改对象属性的值
person.name = "Greg";
// 抛出语法错误
person = {
name:"Greg"
}循环中的块作用域绑定:
let声明变量i只存在于for循环中,一旦循环结束,在其他地方均无法访问该变量。
for(let i = 0; i < 10; i++){
process(items[i]);
}
// i这里不可访问,抛出一个错误
console.log(i);<script>
// 声明变量
let a;
let b,c,d;
let e = 100;
let f = 520; g = 'iloveyou', h = [];
// 1、变量不能重复声明
// let str = '张三';
// let str = '李四';
// 2、块级作用域 全局,函数,eval
// if else while for 都有效
{
let girl = '周扬青';
}
//Uncaught ReferenceError: girl is not defined
//console.log(girl);
// 3、不存在变量提升
console.log(song);
let song = '呵呵';
// 4、不影响作用域链
{
let school = '北京大学';
function fn(){
console.log(school);
}
fn();
}
</script>