阅读 4

js 作用域到底是啥?

这段时间学习的时候发现当时学习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,所以才会看见以上结果。


关注下面的标签,发现更多相似文章
评论