//(1)变量提升:
//变量的提升只会提升声明部分,不提升阈值
//var a;
//var b;
console.log(a);//undefined
console.log(b);//undefined
//console.log(c);//Error: c is not defined
//Error: c is not defined(c没有定义变量)这个结果意味着,在没有(var)声明之前访问会报错,只有用var关键字声明才会提升!!
//(2)声明函数提升:
console.log(fn1); //这样就提升了整个函数体:ƒ fn1(){ console.log('fn1函数被调用了'); }
//(3)赋值式函数提升:
//赋值式函数就是按照变量的提升规则进行提升的,
//只提升(var)声明部分,所以结果就是undefined不是函数。
//var fn2;
console.log(fn2);//undefined
fn2();//Error: fn2 is not a function
A.预编码:
浏览器帮我们做,所做的事情就是基本的语法检查,除了给我们报错时,看不见摸不着
B.预解析:
浏览器帮我们做,负责将所有使用var声明的变量和定义的函数进行提升操作
C.执行代码:
从上往下执行代码,逐条执行
!注意:
如果遇到函数,不会立马执行函数
而是在函数被调用后,再在函数内部进行:预编译---预解析---执行阶段。
// 1.变量提升:
//会所有使用var关键字声明的变量提升到当前作用域的最顶端,
//但是对于变量只会提升声明部分,而不会提升赋值部分。
var a = 11;
console.log(a);//11
var b = 12;
console.log(b);//12
c = 13;
console.log(c);//13
//2.函数的提升:
//将整个函数全部提升到当前作用域的最顶端,仅限声明式函数,所以可以在任意位置调用声明式函数!!
function fn1() {
var d;
console.log(d);//undefined
console.log('fn1函数被调用了');
var d = 14;
console.log(d);//14
}
fn1();
//3.赋值式函数:
//就是按照变量的提升规则进行提升
var fn2 = function () {
console.log('fn2我被函数调用了')
}
fn2();
本文详细解释了JavaScript中变量提升、函数提升以及赋值式函数的原理,强调了预编译和预解析的区别,以及它们对代码执行的影响。

被折叠的 条评论
为什么被折叠?



