JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。
1、全局变量:
指没有定义在任何函数内,直接定义在全局作用域中的变量。
特点:随处可用,可重用。
何时:希望随处可用,且可反复使用的变量,都要声明在函数之外的全局。
2、局部变量:
指定义在函数内的参数和变量,都是局部变量。
特点:仅函数内可用,出了函数不可用,不可重用。
何时:希望变量只在函数内有效时,都要在函数内创建变量。
3、块作用域
块作用域由{ }包括,函数、if语句、for语句里面的{ }也是块作用域。
ES6允许块级作用域的任意嵌套,
{{{{{
let b=6;
console.log(b);// 6
}}}}}
console.log(b);//报错
外层作用域无法读取内层作用域的变量。
{
let a=5;
}
console.log(a);//报错
var:定义的变量是全局变量或者局部变量,是存储信息的容器,可以跨函数访问,不可以跨块访问。
let:定义的变量是块级的变量,不可以跨块访问。
const:定义的变量不可以修改,而且必须初始化。
我们先来看看块作用域
{
var a = 1;
let b = 1;
const c = 1;
const c = 4; // 报错
const f; // 报错
var d;
let e;
console.log(a); // 1
console.log(b); // 1
console.log(c); // 1
console.log(d); // undefined
console.log(e); // undefined
}
console.log(a); // 1
console.log(b); // 报错
console.log(c); // 报错
再来看看函数作用域
(function A() {
var d = 3;
let e = 3;
const f = 3;
console.log(d); // 3 在同一个{ }中,可以被访问到,此时d为局部变量
console.log(e); // 3 在同一个{ }中,可以被访问到,此时e为块级变量
console.log(f); // 3 在同一个{ }中,可以被访问到,此时f为块级变量
})();
console.log(d); // 报错
console.log(e); // 报错
console.log(f); // 报错
如有错误,请您指正!