NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
## 预解析 1. 变量提升:把变量的声明提升到当前作用域的最上面,不包括赋值. 2. 函数提升:把函数的声明提升到当前作用域的最上面,不包括函数的调用. 3. 预解析:预解析就进行了上面的操作. ## 变量提升 ``` console.log(num); var num = 5; ``` 实际是进行了如下操作,所以上面调用num的时候提示undefined,而不是报错. ``` var num; console.log(num); num = 5; ``` ## 函数内变量提升 ``` var a = 25; function f1() { console.log(a); var a = 10; } ``` 预解析后 ``` var a; function f1() { var a; console.log(a); a = 10; } a = 25; ``` ## 变量和函数同名 ``` console.log(a); function a() { console.log('aaaa'); } var a = 1; console.log(a); ``` 预解析后,js解析器首先会把当前作用域的函数声明提前到整个作用域的最前面. 在预解析的过程中如果函数和变量的名字相同,此时函数对变量声明进行覆盖. ``` var a; function a() { console.log('aaaa'); } console.log(a); a = 1; console.log(a); ```