变量提升和函数提升 | 您所在的位置:网站首页 › 变量提升函数提升 › 变量提升和函数提升 |
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 实验室设备网 版权所有 |