说一说JS的作用域吧
作用域的分类
作用域分为:全局作用域,函数作用域,块级作用域
作用域的特性
全局作用域:
能够让变量和函数在全局位置访问,其挂载在浏览器的window对象下面
其中var定义的变量和function函数存在提升,可以在顶部访问。但是箭头函数不行
参考:一次彻底搞清楚js中变量和函数(包括箭头函数)提升_箭头函数为什么不会变量提升-CSDN博客
函数作用域:
只能在其所在函数区块访问
块级作用域:
出现let,const,从此一个花括号也可以拥有自己独有的变量
举例
全局作用域
console.log('xxxxx',values);
console.log('xxxxx',test());
console.log('xxxxx',yyy());
var values = 777
function test() {
var values = "test输出"
console.log(values)
}
const yyy = () => {
console.log('yyyyyy');
}
函数作用域
function test() {
var values = 777
console.log(values)
}
console.log('xxxxx',window.values,values);
块级作用域
if (true) {
var values1 = 888 // 块级作用域,依旧会在外面访问
let values2 = 999
const values3 = 1000
}
try {
console.log('xxxxx', values1);
} catch {
console.log('values1报错');
}
try {
console.log('xxxxx', values2);
} catch {
console.log('values2报错');
}
try {
console.log('xxxxx', values3);
} catch {
console.log('values3报错');
}