简介
“变量提升”意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确。
实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中。
声明变量的方法
var、let、const
不用以上关键字直接赋值的变量会挂载与windows环境下;
let a=9 const a=1 var a=6 c=5
声明函数的方法
javascript中声明函数的方法有两种:函数声明式和函数表达式。
//函数声明
function say(){
console.log('hello')
}
//函数表达式
var say=function (){
console.log('hello')
}
提升的好处
JavaScript 在执行任何代码段之前,将函数声明放入内存中的优点之一是,这允许你可以在在声明该函数之前使用一个函数。
/*** 正确的方式:先声明函数,再调用函数 (最佳实践)*/
function catName(name) {
console.log("我的猫名叫 " + name);
}
catName("Tigger");
/*以上代码的执行结果是: "我的猫名叫 Tigger"*/
/*** 不推荐的方式:先调用函数,再声明函数 */
catName("Chloe");
function catName(name) {
console.log("我的猫名叫 " + name);
}
/*代码执行的结果是: "我的猫名叫 Chloe"*/
提升规则
- var 声明的变量,提升时只声明,不赋值,默认为undefined;不用关键字直接赋值的变量不存在提升(demo1)
- 函数提升会连带函数体一起提升,不执行;(deom2)
- 预解析的顺序是从上到下;(demo4)
- 函数的优先级高于变量,函数声明提前到当前作用域最顶端;(deom3)
- 变量重名,提升时不会重复定义;在执行阶段后面赋值的会覆盖上面的赋值;(demo4)
- 函数重名,提升时后面的会覆盖前面;(demo5)
- 函数和变量重名,提升函数,不会重复定义,变量不会覆盖函数;在执行阶段后面赋值的会覆盖上面的赋值;(demo8)
- 用函数表达式声明函数,会按照声明变量规则进行提升;(deom6)
- 函数执行时,函数内部的变量声明和函数声明也按照以上规则进行提升;(deom7)
- let、const不存在提升;(demo9、demo10)
/**demo1**/
console.log('a=',a) //a=undefined
console.log('b=',b) // Uncaught ReferenceError: b is not defined
var a=1
b=6
/**deom2**/
console.log('a=',a) // a=function a() {console.log("func a()")}
function a() {
console.log("func a()")
}
/**deom3**/
console.log('a=',a) // a=function a() {console.log("fun a")}
var a=3
var a=4
function a(){
console.log("fun a")
}
var a=5
var a=6
console.log("a=",a) // a=6
/**deom4**/
console.log('a=',a) // a=undefined
var a =2
console.log('a=',a) //
var a =3
var a =4
console.log('a=',a) // a=4
console.log('b=',b) //b= undefined
var b='b1'
/**deom5**/
console.log('a=',a) // a=function a() {console.log("a2")}
function a(){
console.log("a1")
}
function a(){
console.log("a2")
}
console.log('a=',a) // a=function a() {console.log("a2")}
/**deom6**/
console.log('a=',a) // a=undefined
var a=function(){console.log('a1')}
var a=3
var a=4
var a=5
console.log(a)
var a=function(){console.log('a2')}
console.log('a=',a) // a= "color: #ff0000">参考资料
MDN
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
标签:
javascript,变量提升
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“详解javascript 变量提升(Hoisting)”评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
2025年11月06日
2025年11月06日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]