图片授权基于 CC0 协议
变量提升涉及到的知识点很少,可以直接上代码。
var web = \\\'JavaScript\\\'
上面「声明变量 web 并赋值」其实是分两步执行:
var web;//1、先声明变量;//执行其它代码web = \\\'JavaScript\\\'//2、在指定的作用域区赋值
所以,就引出一个问题,如果先输出后定义变量会怎样?
console.log(web);//undefined
var web = \\\'JavaScript\\\'//执行赋值
打印变量 web 会输出 undefined 而不是 is not defined ,它的执行逻辑是这样的:
var web;//1、先提升变量
console.log(web);//2、控制台输出:undefined
web = \\\'JavaScript\\\'//3、变量赋值
变量 web 会被提升到最上面;
除了变量提升还有函数提升。
函数表达式
webFn();//控制台输出:webFn is not a function
//函数表达式
var webFn = function(){
console.log(\\\'JavaScript2\\\')
}
和变量提升同理。
函数声明
webFn();//控制台输出:JavaScript
//函数声明
function webFn(){
console.log(\\\'JavaScript\\\');
}
上面代码真实的执行逻辑是:
function webFn(){
console.log(\\\'JavaScript\\\');
}
webFn();//JavaScript
声明的函数会被提升到最顶部。
那定义函数名和函数表达式名称相同,那如何处理?
//函数声明function webFn(){ console.log(\\\'JavaScript1\\\');}//函数表达式var webFn = function(){ console.log(\\\'JavaScript2\\\')}webFn();//控制台输出:JavaScript2
函数表达式会提前声明函数,但只有执行完后,才会赋值。但「函数声明」会提升到最顶部。
参考资料:
[1]《你不知道的 JavaScript 上 》
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34577.html