携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
-
作用域
-
变量可以起作用的范围
-
如果变量定义在一个函数内部,只能在函数内部被访问到,在函数外部不能使用这个变量,函数就是变量定义的作用域
-
任何一对花括号中的结构体都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域
-
在es6之前没有块级作用域的概念,只有函数作用域,现阶段可认为JavaScript没有块级作用域
报错:表明未定义a函数的参数也是局部变量
-
-
作用域链
- 只有函数可以制造作用域结构,那么只要是代码,就至少有一个作用域,即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。将这样的所有作用域列出来,可以有一个结构:函数内指向函数外的链式结构,称为作用域链
-
不写var关键字的影响
-
在函数内部想要定义新的变量,如果不加关键字var,相当于定义的全局变量。如果全局也有相同的标识符,会被函数内部的变量影响,局部变量污染全局变量
-
注意:每次定义变量时都必须写var关键字,否则就会定义在全局,可能污染全局
-
-
预解析
-
JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程
-
预解析过程:
1.把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值
2.把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用
3.先提升var,再提升function
-
JavaScript的执行过程:在预解析之后,根据新的代码顺序,从上往下按照既定规律执行js代码
-