JS中的作用域
什么是全局作用域:
页面一打开就会形成一个全局作用域;一个页面只有一个全局作用域
什么是私有作用域及查找机制:
函数执行的时候会形成一个私有的作用域;
什么是块级作用域:
在es6中 所有的{},排除对象,都是块级作用域;
如何查找上级作用域:
上级作用域是谁,就看这个函数是在那个作用域声明定义的;
私有作用域中没有声明变量的查找机制
对于私有作用域中的某些变量,若没有在私有作用域中声明过,那么函数执行时,就会去 上级作用域查找该变量,上级作用域若没有该变量,则接着向上级查找,直到查找到 全局作用域,若仍没有, 则报错;
变量提升
什么是变量提升
当页面一打开;JS要从上向下执行的时候,先把整个JS浏览一遍 把其中带var 和 function 的 提前声明一下 *注1: let const 声明的变量 不存在变量提升;
*注2:var 是只声明不定义 (只声明不定义给的默认值为undefined)
function 是既声明又定义
*注3: 在条件句中的代码,也会进行变量提升,不管条件是否成立,对于带function的变量这时只有声明没有定义;(在 {}块级作用域中 只声明不定义)(IE6-8 是既声明又定义的)
变量:
什么是全局变量
在全局声明的变量叫做全局变量
什么是私有变量:
在私有作用域声明的变量叫私有变量; *注:形参也是私有变量
函数执行的过程:
先开辟一个私有作用域(栈内存),形参赋值,然后变量提升,然后代码从上向下执行;
暂时性死区:在let和const之前 不能使用 他们声明的任何变量