写给自己:每天进步一点点啦!!!奥里给!!!
y也没那么深奥,就和表面意思一模一样啦!!!
先从简单的东西看起,如下
console.log(num);
var num = 23333;
很明显,结果是 undefined
这个结果说明了啥???变量提升只提升声明,并不会提升赋值
和变量预解析有一对丢类似的概念, 函数的声明会被提升到当前作用域的最上面,但是不会调用函数(敲黑板!!!)。
fun();
function fun() {
console.log('我是DJDJDJDJ哈哈哈哈哈');
}
输出成功,奥里给!!!
看看下面这个例子!!!
fun();
var fun = function() {
console.log('DJDJDJDJ');
}
结果:报错提示 ”fun is not a function"??????
:该段代码执行之前,会做变量声明提升,fun此时值为undefined;而fun调用是在fun被赋值为函数体之前,此时fun的值是undefined,所以无法正确调用,所以不难发现JavaScript魅力真的有点不大一样鸭!!!
再补充几个例子,加强我的记忆,奥里给!!!
第一个:
console.log(num); // 输出undefined
var num = 10;
上面那个相当于执行了下面的过程!!!是不是突然又觉得自己又可以了!!
var num;
console.log(num);
num = 10;
第二个:
对上面那个讲解一下还是!!!
fun();
var fun = function() {
console.log(23333);
}
相当于是下面的过程:
var fun;
fun();
fun = function() {
onsole.log(22);
}
所以为啥报错显而易见对吧!!!
第三个:
var num = 10;
fun();
function fun() {
console.log(num);
var num = 20;
}
var num = 10;
function fn() {
console.log(num);
var num = 20;
console.log(num);
}
fn();
var num;
function fn() {
var num;
console.log(num);
num = 20;
console.log(num);
}
num = 10;
fn();
相当于是:
var num;
function fun() {
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
第四个:
var a = 18;
f1();
function f1() {
var b = 9;
console.log(a);
console.log(b);
var a = '123';
}
相当于是:
var a;
unction f1() {
var b;
var a;
b = 9;
console.log(a);
console.log(b);
a = '123';
}
a = 18;
f1();
最后一个 :
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
相当于是:
function f1() {
var a;
a = b = c = 9;// 相当于 var a = 9; b = 9; c = 9; b 和 c 没有赋值 没有var 声明,当 全局变量看
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
解释():
参看第三条,b=c=9就相当于是全局变量了!!!所以为啥第二次a会报错!!!