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

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();//执行

函数优先


hello();//执行

var hello;

function hello(){

console.log(‘log hello’);

}

hello = function(){

console.log(‘log hello1’);

}

这段代码会打印出:log hello

从结果中可以看到函数执行的时候是打印了log hello,函数执行完以后hello变量会被赋值语句替换成打印log hello1的函数,为啥?实际这段代码会被处理成这样

function hello(){

console.log(‘log hello’);

}

hello();//执行

//var hello这句被忽略了

hello = function(){

console.log(‘log hello1’);

}

函数优先提升到最上面,此时在用声明var hello将被忽略,因为此时已经存在hello了,他是一个函数,那接下来执行函数hello当然就打印出之前的结果,然后才被替换。

最后

编程基础的初级开发者,计算机科学专业的学生,以及平时没怎么利用过数据结构与算法的开发人员希望复习这些概念为下次技术面试做准备。或者想学习一些计算机科学的基本概念,以优化代码,提高编程技能。这份笔记都是可以作为参考的。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

名不虚传!字节技术官甩出的"保姆级"数据结构与算法笔记太香了

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值