先来看一段代码
showName() console.log(myname) var myname = '极客时间' function showName() { console.log('函数showName被执行'); }
思考一下它的输出
为什么myname在声明之前就可以输出到控制台=>这就是因为变量提升
上面的代码等价于下边的代码
/* * 变量提升部分 */ // 把变量 myname提升到开头, // 同时给myname赋值为undefined var myname = undefined // 把函数showName提升到开头 function showName() { console.log('showName被调用'); } /* * 可执行代码部分 */ showName() console.log(myname) // 去掉var声明部分,保留赋值语句 myname = '极客时间'
注意
function showName() { console.log('极客邦'); } showName(); function showName() { console.log('极客时间'); } showName();
分析一下执行过程
showName() var showName = function() { console.log(2) } function showName() { console.log(1) }
分析一下执行过程
编译阶段:
var showName = undefined
function showName(){console.log(1)}
执行阶段:
showName()//输出1
showName=function(){console.log(2)}
//如果后面再有showName执行的话,就输出2因为这时候函数引用已经变了