本文主要介绍javascript变量提升(提升)的详细说明。边肖认为这很好。现在分享给大家,给大家一个参考。来和边肖一起看看吧。
简介
“变量提升”是指变量和函数的声明在物理层面会移到代码的前面,但这么说并不准确。
实际上,代码中声明的变量和函数的位置不会被移动,而是在编译阶段被放入内存中。
声明变量的方法
var、let、const
不使用上述关键字直接赋值的变量将被挂载到windows环境中;
设a=9
常数a=1
var a=6
c=5
声明函数的方法
javascript中声明函数有两种方式:函数声明和函数表达式。
//函数声明
函数say(){
console.log('hello ')
}
//函数表达式
var say=function (){
console.log('hello ')
}
提升的好处
在JavaScript执行任何代码段之前将函数声明放在内存中的好处之一是,它允许您在声明函数之前使用它。
/* * *正确的方法:在调用函数之前声明它(最佳实践)*/
函数类别名称(名称){
Console.log('我的猫叫'名字');
}
猫名('跳跳虎');
/*上面代码的执行结果是:'我的猫叫跳跳虎' */
/* * *不推荐方式:先调用函数,再声明函数*/
猫名('克洛伊');
函数类别名称(名称){
Console.log('我的猫叫'名字');
}
/*代码执行的结果是:‘我的猫叫克洛伊’*/
提升规则
var声明的变量,只在提升时声明,不赋值,默认值未定义;没有关键字直接赋值的变量没有提升(demo1)。
函数提升会和函数体一起提升,不执行;(deom2)
预解析的顺序是从上到下;(演示4)
函数的优先级高于变量,函数声明提前到当前作用域的顶部;(deom3)
变量同名,提升时不会重复定义;在执行阶段之后进行的赋值将覆盖上述赋值;(演示4)
功能同名,推广的时候后面的会覆盖前面的;(演示5)
且函数提升,定义不再重复,变量不覆盖函数;在执行阶段之后进行的赋值将覆盖上述赋值;(演示8)
用函数表达式声明函数,会按照声明变量的规则提升;(deom6)
函数执行时,函数内部的变量声明和函数声明也按上述规则提升;(视频7)
对于let和const没有提升;(演示9、演示10)
/* *演示1**/
console.log('a=',a)//a=未定义
console.log('b=',b) //未捕获的ReferenceError: b未定义
var a=1
b=6
/**deom2**/
console.log('a=',a)//a=function a(){ console . log(' func a()')}
函数a() {
console.log('func a()')
}
/**deom3**/
console.log('a=',a)//a=function a(){ console . log(' fun a ')}
var a=3
var a=4
函数a(){
console.log('fun a ')
}
var a=5
var a=6
console.log('a=',a) //a=6
/**deom4**/
console.log('a=',a)//a=未定义
var a=2
console.log('a=',a) //
var a=3
var a=4
console.log('a=',a) //a=4
console.log('b=',b) //b=未定义
var b='b1 '
/**deom5**/
console.log('a=',a)//a=function a(){ console . log(' a2 ')}
函数a(){
console.log('a1 ')
}
函数a(){
console.log('a2 ')
}
console.log('a=',a)//a=function a(){ console . log(' a2 ')}
/**deom6**/
console.log('a=',a)//a=未定义
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=(){ console . log(' a2 ')}
/**deom7**/
console.log('b=',b)
var a=3
职能b{
console.log('a=',a)
var a=4
函数a(){
console.log('fun a ')
}
console.log('a=',a)
}
乙()
/* *演示8**/
console.log('a=',a)//a=function a(){ console . log(' fun a ')}
var a=2
函数a(){
console.log('fun a ')
}
console.log('a=',a) //a=2
var a=3
var a=4
var a=5
console.log('a=',a) //a=5
/**demo9**/
console.log('a=',a)//未捕获的ReferenceError:未定义
设a=4
/****/
!演示10
console.log('b=',b) //未捕获的ReferenceError: b未定义
常数b=5
参考资料
MDN
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。