什么是作用域 作用域即作用范围,在js中采用的是词法作用域,所谓的词法作用域之的是在代码编写的过程中体现出来的作用范围,代码一旦写好,不用执行作用范围就已经决定了,这个就是词法作用域 在js中作用域的规则,
- 函数运行访问函数外的数据
- 在整个代码中只有函数可以限定作用域
- 首先需要考虑提升规则
- 如果当前作用域中已经有名字,就不再考虑函数外的名字(就近原则)
作用域链
1. 在js中只有函数可以制造作用域,只要有代码就会有一个作用域即全局作用域,凡是代码中有函数那么这个函数就构成了一个新的作用域,如何函数中还有函数,那么在这个作用域中就会再有一个新的作用域诞生,这样将所有的作用域列出来就构成了作用域链
变量的访问
- 首先看变量在第几条链上(即哪个作用域),在该链上看是否存在变量的定义与赋值,如果有直接拿来使用,
- 如果没有去上一层链去查找,如果有直接使用,停止继续查找
- 如果还没有就继续查找.直到找到全局作用域,如果全局作用有中没有,就是is not defined
- 同级链是不可以混合查找的 #代码预解析(变量提升)
在程序执行的过程中,会先将代码读取内存中,会将所有的声明在此时进行标记,所谓的标记就是告诉解释器知道有这个名字,后面再使用名字的时候,不会出现未定义的错误,这个标记过程就是变量名提升
名字声明:
即变量名提升 :告诉解释器知道已 经有这个名字了。且只提升变量名(没有任何数据与其对应)
函数声明:函数声明包括两个部分:
1. 首先函数声明告诉解释器,这个名字已经存在,还阶段与变量名提升一样 2. 告诉解释器,这个名字对应的函数体是什么
- . 函数声明与函数表达有区别,函数声明单独写在一个结构中,不存在任何语句。逻辑判断等结构中
- . 函数后面不加括号
作者:lison 链接:juejin.cn/post/686992… 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。