JavaScript 中的作用域、预解析与变量声明提升

99 阅读2分钟
  • JavaScript 中的作用域、预解析与变量声明提升?

作用域:就是变量的有效范围。如何检测一个变量的作用域:在指定的区域内使用这个变量,如果不报错,说明这个变量的作用域包含此区域。

函数作用域:只有函数能够划分变量的作用域,这种作用域的规则就叫函数作用域。如果在函数内访问一 个变量,优先找局部变量和形参,如果没有找到,去定义该函数的环境中查找,直到全局为止。在 ES6 之前,只有函数可以划分变量的作用域,所以在函数的外面无法访问函数内的变量。在 ES6 之前,没有块级作用域的概念,所以在代码块的外面可以访问代码块内的变量块级作用域:凡是代码块就可以划分变量的作用域,这种作用域的规则就叫块级作用域。块级作用域 函数作用域 词法作用域之间的区别:

1、块级作用域和函数作用域描述的是,什么东西可以划分变量的作用域

2、词法作用域描述的是,变量的查找规则。之间的关系:

(1) 、 块级作用域 包含 函数作用域。

(2) 、 词法作用域 与 块级作用域、函数作用域之间没有任何交集,他们从两个角度描述了作用域的规则。ES6 之前 js 采用的是函数作用域+词法作用域,ES6 js 采用的是块级作用域+词法作用域 。

预解析:在代码整体执行之前,先解析一部分。预解析之后,代码才会从上往下依次整体执行,但是预解析执行过的代码不会重复执行。

js 预解析干了什么事:js 中预解析会把声明部分的代码预先执行。

声明相关的代码可以分为两部分:

1、 变量声明

通过 var 关键字定义的变量。

2、函数声明

通过 function 关键字声明的函数预解析时如果遇到重复的变量声明,那么忽略。预解析时如果遇到重复的函数声明,保留后面的函数。预解析时如果遇到变量与函数重名的情况,保留函数。

变量声明提升:

使用 var 关键字定义的变量,被称为变量声明;

函数声明提升的特点是,在函数声明的前面,可以调用这个函数。