JavaScript中的变量提高和函数提高

关于JavaScript中的变量提高和函数提高,看一道面试题:javascript

console.log(a)
function a(){}
console.log(a)
var a = 0;
console.log(a)

以上代码中会打印出什么呢?java

一开始,我觉得是面试

undefined
function a(){}
0

后来我觉得是函数

function a(){}
undefined
0

可是其实是:code

function a(){}
function a(){}
0

为何呢?blog

其实就两个姿式点图片

1.函数和变量相比,会被优先提高。这意味着函数会被提高到更靠前的位置。如下图片截取致MDN官网ip

2.若是你从新声明一个 JavaScript 变量,它将不会丢失其值。io

上面的代码能够看做是这样的:console

function a(){}
var a;
console.log(a)
console.log(a)
a = 0;
console.log(a)

为何第一个a打印的是function a(){},由于函数比变量优先提高;

为何第二个a打印的仍是function a(){},由于从新声明一个变量,它不会丢失其值;

至于第三个a打印的是0就很简单了,a被从新赋值为0,打印出来的天然是0了。

 

因此说如下代码是不同的

function b() {}
var b = undefined;
console.log(b)

// 没有赋值
function b() {}
var b;
console.log(b)

因此单纯的说使用var申明一个变量,其默认值是undefined会给人带来误解

相关文章
相关标签/搜索