关于变量提升和函数提升

1.变量提升

(1)变量提升就是var 声明的变量,无论在当前作用域的什么位置声明,都会将声明的变量提升到作用域的前面,例如:

console.log(a)  //undefine
var a=10

相当于

var a
console.log(a)
a=10

所以声明只是将声明提升,值还在原来的位置
(2)在使用if判断中声明的var声明时,可能if 不被执行,但是里面的声明被提升

console.log(a) //undefine
  a=10
if(false){
	var a=20
}
console.log(a)  //10

2.函数提升(函数提升的根本原因就是为了解决函数之间互相递归调用的情况)

函数分为函数声明和函数表达式(即函数字面量)
(1)函数声明会优于变量声明提升,在作用域的最前面。

console.log(a)  //ƒ a(){}
var a=10   //变量声明
function a(){
}   //函数声明

相当于

function a(){
}
var a  
console.log(a)
a=10

(2)如果用函数表达式的形式,只提升了表达式的变量

console.log(a)//undefine  
var a=10
var a=function(){}

相当于

var a
var a
console.log(a)
a=10
a=function(){}

3.let和var 的区别是

let 是局部作用域没有变量提升,var 是全局作用域存在变量提升,

console.log(a)  //Cannot access 'a' before initialization
let a=10   //变量声明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值