这段时间学习的时候发现当时学习JS的作用域时感觉有点死记硬背的成分,最近的学习使用对JS的作用域有了更深的了解。下面就分享给大家。
在说js作用域时就必须要说下js的语句,因为语句是js作用域的依赖,可以认为有了语句才会有作用域。
1:什么是js语句?
在js中将语句分为两种:声明和语句。声明就是:
let a;//声明一个变量a而语句分为普通语句和声明型语句
而语句块就是用大括号把代码块包起来
{
let a = 1;
function say () {
}
}//2:js的预处理机制
为什么要说下js的预处理机制呢?因为我觉得它可以让你更容易理解作用域。js的预处理机制就是js代码在运行之前js的预处理机制就会提前将js文件中的var,let,const,函数,class声明的变量或语句识别一下。
3:作用域
先来看下一个经典的作用域问题
var a = 1;
function unm() {
console.log(a) //undefined
var a = 2;
}为什么console.log(a)会是undefined?这时候js的预处理机制就起作用了,预处理机制在unm函数内发现有一个变量a。运行js的时候就会输出undefined,因为在运行unm函数时console.log(a)语句不会向上查找,是因为在js预处理阶段已经在unm函数内发现了变量a,所以才会看见以上结果。