预解析面试题类型
function test(a, b) { console.log(a); //function console.log(b); //undefined var b = 234; console.log(b); //234 a = 123; console.log(1); //1 function a() {} //执行的时候这个函数声明会被提前,也就是说在开头就已经声明 var a; b = 234; var b = function () {}; console.log(a); //123 console.log(b); //function } test(1);
预解析
javascript是一个解析性预言,就是在代码执行之前,对代码进行通读。
一共解析俩个:
1.声明式函数
2.var 关键字
做俩件事:会把var声明的变量提前(即浏览器知道有一个变量,但还没有值),和把声明式函数提前
var声明的变量和function声明的函数在预解析的时候有区别,var声明的变量在预解析的时候只是提前的声明,function声明的函数在预解析的时候会提前声明并且会同时定义。也就是说var声明的变量和function声明的函数的区别是在声明的同时有没同时进行定义。