,,详解javascript 变量提升(Hoisting)

,,详解javascript 变量提升(Hoisting)

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: