变量提升和函数提升 您所在的位置:网站首页 变量提升函数提升 变量提升和函数提升

变量提升和函数提升

#变量提升和函数提升| 来源: 网络整理| 查看: 265

1.变量提升

console.log(a);//undefined 

var a=123;

因为变量a的声明被提到了作用域顶端。代码编译后应该是下面这个样子(只是声明的a提升上去了,赋值并没有提升到顶端)

在代码中 使用 var 来声明变量的时候,会提到当前作用域的顶端,而赋值操作在原处不变

var a;

console.log(a)

a=123//所以输出内容为 undefined

经典面试题

解析:

1.第一个打印出undefined是因为变量提升,当前的v1只是声明了并没有赋值

2.第二个打印undefined是因为var的变量声明只是提升到当前作用域的顶端,foo函数体的v1跟第一个打印一样,只是提升没有赋值

3.第三个打印是因为var重复声明并且内层变量会覆盖外层变量,当前的v1已经被修改

4.第四个打印是因为函数内部的变量外部是访问不到的,当前的v1是100

2.函数提升 具名函数的声明有两种方式:1. 函数声明式 2. 变量形式声明

//函数声明式 function bar () { }

//变量形式声明; var foo = function () {}

注意:

bar()

var bar=function(){console.log(2);}// 报错:TypeError: bar is not a function

变量形式声明 的函数 和普通变量一样 提升的 只是一个没有值的变量,所以执行bar的时候函数体还在底下没有赋值

bar()

functionbar(){console.log(1);}//输出结果1

函数声明式会提升到作用域最前边,并且将声明内容一起提升到最上边。,所以执行bar的时候它已经是一个函数体了

函数声明的优先级高于变量声明的优先级,并且函数声明和函数定义的部分一起被提升,所以会先打印一个1然后才打印2



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有