JS拿到一段代码或一个函数的时候,会有两步主要操作,即解析与执行。
在解析阶段,JS会检查语法,并对函数进行预编译。所以当函数的代码有语法错误的时候,在函数执行前就会报错(SyntaxError)。
JavaScript 在执行任何代码段之前,将函数声明和变量放入内存中的优点之一是,这允许你可以在你的代码中使用一个函数和变量,在声明该函数和变量之前。(更好的容错性)
newFun(); //这里的newFun可以再newFun函数调用之前引用就是因为Js再编译阶段就将函数和变量放入了内存
function newFun () { //... }
num = 6;
num + 7;
var num;
/* 没有给出错误,只要声明了num */
变量申明 和 变量初始化
var y; //变量申明
y = 10; // 变量初始化
var y; //变量声明
console.log(y); // 打印结果: underfined
y = function A () {} //变量初始化
JavaScript 仅提升声明,而不提升初始化。如果你先使用的变量,再声明并初始化它,变量的值将是 undefined。
var x = 1; // 声明 + 初始化 x
console.log(x + " " + y); // '1 undefined'
var y = 2; // 声明 + 初始化 y
zai编译阶段进行变量提升,可以更早的计算处要分配给堆栈的空间,因为知道了定义了几个变量和函数。还可以再编译阶段纠正一些错误,提升性能。