js变量提升心得

js变量提升心得

旧版本变量提升:

旧版本浏览器没有块级作用域这种说法,只有全局作用域与函数作用域

在旧版本中变量提升

变量提升定义:js在代码执行之前,会将变量声明提升到所属作用域的最顶端

例如

console.log(foo)  // undefined
var foo = 'bar';
console.log(foo) // bar

上述代码可以看作

var foo // 经变量提升定义提升到所属作用域的最顶端
console.log(foo)  // undefined
var foo = 'bar';
console.log(foo) // bar

变量提升注意要点:
1、当变量同名时函数提升的优先级高于变量提升
2、提升变量时,提升的是变量的声明,而提升函数时,会将函数的声明和定义一起提升

例如

console.log(foo)
foo()
var foo = 'bar';
function foo(){
	console.log(1)
}
console.log(foo) // bar

输出结果为:
function foo(){
console.log(1)
}
1
bar
上述代码相当于:

function foo(){
	console.log(1)
}
var foo
console.log(foo)
foo()
var foo = 'bar';
console.log(foo) // bar

新版本变量提升

新版本中函数变量提升更改为了只提升函数的声明,而不提升函数的定义

console.log(a)
var a = 0
if(true){
    console.log(a)
    function a(){}
    console.log(a)
}
console.log(a)

相当于:

var a
console.log(a) // undefined
a = 0
if(true){
// 一旦进入块级作用域,function a(){}不会给a重新赋值,但是为了兼容旧版本,会把修改过的a映射到全局,此时全局的a就是一个函数
	function a
    console.log(a) 
    function a(){} 
    console.log(a)
}
console.log(a)

结果:
undefined
a(){}
a(){}
a(){}

如有错误请各位指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值