JS中的作用域及变量提升

346 阅读2分钟

JS中的作用域

什么是全局作用域:

页面一打开就会形成一个全局作用域;一个页面只有一个全局作用域

什么是私有作用域及查找机制:

函数执行的时候会形成一个私有的作用域;

什么是块级作用域:

在es6中 所有的{},排除对象,都是块级作用域;

如何查找上级作用域:

上级作用域是谁,就看这个函数是在那个作用域声明定义的;

私有作用域中没有声明变量的查找机制

对于私有作用域中的某些变量,若没有在私有作用域中声明过,那么函数执行时,就会去 上级作用域查找该变量,上级作用域若没有该变量,则接着向上级查找,直到查找到 全局作用域,若仍没有, 则报错;

变量提升

什么是变量提升

当页面一打开;JS要从上向下执行的时候,先把整个JS浏览一遍 把其中带var 和 function 的 提前声明一下 *注1: let const 声明的变量 不存在变量提升;

*注2:var 是只声明不定义 (只声明不定义给的默认值为undefined)

function 是既声明又定义

*注3: 在条件句中的代码,也会进行变量提升,不管条件是否成立,对于带function的变量这时只有声明没有定义;(在 {}块级作用域中 只声明不定义)(IE6-8 是既声明又定义的)

变量:

什么是全局变量

在全局声明的变量叫做全局变量

什么是私有变量:

在私有作用域声明的变量叫私有变量; *注:形参也是私有变量

函数执行的过程:

先开辟一个私有作用域(栈内存),形参赋值,然后变量提升,然后代码从上向下执行;

暂时性死区:在let和const之前 不能使用 他们声明的任何变量