0
点赞
收藏
分享

微信扫一扫

我的Javascript学习-------基础篇(七)(关于预解析的学习)


写给自己:每天进步一点点啦!!!奥里给!!!

文章目录

  • ​​预解析​​
  • ​​啥是预解析??​​
  • ​​变量的预解析​​
  • ​​函数的预解析​​
  • ​​函数表达式声明函数问题​​
  • ​​几个相关小例子(来自网络各大网站收集)​​

预解析

啥是预解析??

y也没那么深奥,就和表面意思一模一样啦!!!

  • 预解析:在当前作用域下,js运行之前,会把带有var和function关键字声明的变量先声明,并在内存中安排好。然后从上至下解析js语句。而且function的声明优先于var声明。
    🌂:不过下面这一点很重要
    预解析会把变量和函数的声明在代码执行之前执行完成。

变量的预解析

  • 预解析还有一种说法叫做变量提升、还有个叫函数提升的东西。
  • 变量提升: 变量的声明会被提升到当前作用域的最上面,但是对于变量的赋值却不会随之提升(敲黑板!!!)。

先从简单的东西看起,如下

console.log(num);  
var num = 23333;

这个结果说明了啥???变量提升只提升声明,并不会提升赋值

函数的预解析

和变量预解析有一对丢类似的概念, 函数的声明会被提升到当前作用域的最上面,但是不会调用函数(敲黑板!!!)。

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魅力真的有点不大一样鸭!!!

几个相关小例子(来自网络各大网站收集)

再补充几个例子,加强我的记忆,奥里给!!!
第一个:

.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);

解释():

  • 全局变量在代码的任何位置都可以使用
  • 在全局作用域下 var 声明的变量 是全局变量
  • 特殊情况下,在函数内不使用 var 声明的变量也是全局变量

参看第三条,b=c=9就相当于是全局变量了!!!所以为啥第二次a会报错!!!


举报

相关推荐

0 条评论