JavaScript中的变量提升与函数提升中的变量提升与函数提升
相信大家在学习JS的过程中,会遇到一个词,叫做“预解析”,什么是预解析呢,预解析就是说我程序在执行前,会先检查代码
有没有语法错误,就是说相当于电脑先整体瞥一眼你的代码,如果有语法错误的话,会直接终止程序。我们接下来要讲的声明
提升,就是预解析中的一个环节。因为之前不是说
那么我们为什么要做声明提升呢?声明提升又有什么作用呢?。声明提升可以把所有需要和内存交互的行为提前,这样一来,
我们把所有的内存操作集中在一起的话,可以提升代码效率。目的就是可以达到优化代码执行效率的一个作用。
介绍了这么多,接下来我们开始说一下如何实现声明提升。声明提升包括两个部分,就是变量提升与函数提升。
首先我们先来看变量提升,何为变量提升呢?我们首先要了解变量包括哪两个部分
变量的声明 例如 var a;
变量的赋值 例如 a=666;
而我们所说的变量提升呢,其实就是指把变量的声明部分提到当前作用域的最前面去。记住,是当前作用域的最前面,不是说
你想提到哪就能提到哪的。光说的话可能不好理解,下面我们直接上代码。
第一段是正常写的一个变量。
var a=111;
var b=222;
var c=333;
接下来再看变量提升后的一个变量
var a,b,c;
a=111;
b=222;
c=333;
其实可以看出来,就是前面说的,我们把变量的声明部分给提到了当前作用域的最前面,而把函数的赋值部分,给留到了原
地。这就是我们所说的变量提升,是不是很简单呢。但变量提升会导致一个问题的出现,下面我们看一段代码与运行结果。
var a,b,c;
console.log(a);
a=111;
b=222;
c=333;
就是说当你在变量赋值之前调用它的话,控制台只会显示”undefined”,那么导致这个问题的出现也是因为通过var声明的变
量,进行预解析的时候会先声明变量,不管变量有没有赋值,声明时都赋值为undefined。这时候可能会有人说了,你这一目
了然啊,在赋值之前就调用,肯定得不到任何东西的,可是你想象一下,这是在代码极少的情况下很容易看出来,但如果我现
在是上千行,或者更多的代码量的时候呢?在提升以后,保不齐什么时候会出现一个上面这样情况的出现,所以说这也是变量
提升的一个缺点。
说完了变量提升,接下来咱们再说说什么是函数提升,有了前面变量提升的基础,再看函数提升也更容易理解。如果说变量提
升是局部提升的话(因为只提升了声明部分),那么函数提升的话就是整体提升了。什么是整体提升呢,下面我们先写一个函
数aa
var a,b,c;
console. log(a);
a=111;
b=222;
c=333;
function aa(){
console.log(" 66666666");
}
在编译你的程序的时候,系统一路从上往下看代码,看到你这边发现你声明了一个函数aa,就会给你提升到最前面。也就是
说,与之前变量提升不同的是,我无论在什么地方调用这个函数aa,都可以。什么意思呢?就是说我不管函数的调用是写在
函数定义的前面,还是函数定义的后面,都可以执行。比如下面一段代码
var a,b,c;
aa();
a=111;
b=222;
评论0
最新资源