JavaScript难点——变量提升和函数提升(三)

来源:互联网 发布:虚拟视频软件电脑 编辑:程序博客网 时间:2024/05/21 09:42

前端菜鸟的成长之路


关于函数和变量同时提升的问题,代码如下

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

输出结果为:function a(){}

分析一:

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

分析二:

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

两种分析的争论点在 var 和 function 到底谁在最顶上,我们用分析一的结果来做个测试,如下:

var a;console.log(typeof a); //function  假设分析一是对的,此处应该是undefinedfunction a(){};console.log(typeof a); //functionconsole.log(a);        //function a(){}a = 1;console.log(typeof a); //number

一目了然了吧,可见函数提升比变量提升更靠前(函数声明比变量声明具有更高的优先级)。

正确的分析如下:

function a(){};   //函数提升 名称a进入当前作用域 typeof a为function  var a;            //变量提升 声明的部分会被忽略 typeof afunctionconsole.log(a);   //输出 function a(){}a = 1;            //a被赋值 typeof a为number
原创粉丝点击