预解析
预解析: 在所有代码开始执行之前, 对代码进行通读并解释, 解释完毕以后再开始执行代码
函数调用问题:
-
在函数定义的时候, 被装进 "盒子" 内的代码是不会执行的
-
在函数调用的时候, 代码才会执行
预解析有两部分:
-
全局预解析:打开页面的时候,会对全局代码进行预解析,但函数体内的代码不管
-
局部预解析:当你函数调用的时候,会在函数的私有作用域下进行预解析,解析完毕执行函数体内代码
预解析都解释哪些内容:
-
var
-
声明式函数
var的预解析:
-
向浏览器内存声明, 有一个变量被定义了, 但是没有赋值
-
赋值操作是在代码执行阶段才会执行的
console.log(num) var num //输出undefined
分析:
当你使用一个变量的时候
-
如果报错: xxx is not defined, 说明这个变量没有定义
-
如果出现 undefined 说明这个变量定义过, 但是没有赋值
console.log(num) 包含两个操作 1. var num 2. num = 100 var num = 100
代码:
console.log(num) var num = 100 打开浏览器后预解析: • 第 1 行 代码, 不需要预解析 • 第 2 行 代码, 有 var 关键字 • 进行预解析, var num 在浏览器声明了一个叫做 num 的变量, 但是此时不进行赋值 开始执行代码: 第 1 行 代码, console.log(num) 访问 num 这个变量 因为预解析的时候已经声明了 num 变量 所以此时是 有变量, 但是没有值 所以出现 undefined 第 2 行 代码, 因为 var num 已经在预解析执行过了 这里只有 num = 100 这句代码了 给 num 变量进行赋值 console.log(num) var num = 100 等价于 var num console.log(num) num = 100
console.log(num) //undefined console.log(num2) //报错,var num2 = 200 不参加预解析,函数内不预解析 var num = 100 fun