深入理解js变量提升和函数提升,还怕面试吗?(1)

函数提升

函数优先

函数声明覆盖

总结


提升的定义

=====

无论作用域中的声明出现在什么地方,都将在代码被执行前先进行处理,将所有的声明移动到各自作用域的顶端,这个过程叫提升。

变量提升


a=2;

var a;

console.log(a);

这段代码console会打印什么呢?也许是undefined,但其实会打印 2 。因为这段代码实际会被这样处理:

var a;

a=2;

console.log(a);

其中:var a;是编译,后面的两句才是执行。

再来看一段:

console.log(a);

var a=2;

它会被处理成这个样子

var a;

console.log(a);

a=2;

同样的 var a;是编译,后面两句是执行,因为a=2赋值是在打印之后,所以这段代码会输出 undefined.。

从上面两段代码就可以知道 以var这样声明的变量,放到哪里都会在编译阶段被移动到当前作用域的最上面。

函数提升


函数的声明跟变量声明也是一样会被提升,下面看函数的实例:

hello();//执行

function hello(){//函数声明,这里可以看到声明在后,执行在前,能正常执行吗?

console.log(‘hello’);

}

我们运行这段代码,可以看到是正常输出的,也就是函数声明被提升了。

那如果我们用var 来声明函数会怎么样呢?

hello();//执行

var hello = function (){

console.log(‘hello’);

}

执行会报错:

为什么呢?因为 var hello = function (){

console.log(‘hello’);

}  这样写的话var hello是变量声明,后面的是赋值操作,变量被提升了,赋值操作是没有被提升的,其实这段等同于这样:

var hello;

hello();//执行

hello = function(){

console.log(‘hello’);

}

在执行的时候hello是只被声明的,它的值是undefined,所以用()来调用会出现TypeError,改成下面这样才能正常工作,想用这种方式写,需要将其放到函数执行的前面:

var hello= function(){

console.log(‘hello’);

}

hello();//执行

其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)

《前端开发四大模块核心知识笔记》

最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值