函数提升
函数优先
函数声明覆盖
总结
提升的定义
=====
无论作用域中的声明出现在什么地方,都将在代码被执行前先进行处理,将所有的声明移动到各自作用域的顶端,这个过程叫提升。
变量提升
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学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。