JavaScript学习笔记 - 提升

JavaScript代码在执行前会将所有的声明移动到各自作用域的最顶端,这个过程叫做提升。

1. 需要记住的几条规则:

  • 函数声明优先提升,然后才是变量声明。

  • 重复的变量声明会被忽略。

  • 重复的函数声明,后面的声明会覆盖前面的声明。

  • let 和 const 声明的变量存在暂时性死区(temporal dead zone,简称 TDZ)

    使用let或const命令声明变量之前,该变量都是不可用的。

2. 例子:

  • 变量声明提升
console.log(bar)   // undefined
var bar = 1
console.log(bar)  // 1

/*提升后*/

var bar
console.log(bar)
bar = 1
复制代码
  • 函数声明提升
foo()   // fuck oriented object
function foo() {
  console.log('fuck oriented object')
}

/*提升后*/

function foo() {
  console.log('fuck oriented object')
}
foo() 
复制代码
  • 函数表达式提升
foo()   // 报错 : foo is not a function
var foo = function () {
  console.log('fuck oriented object')
}

/*提升后*/

var foo
foo() 
foo = function () {
  console.log('fuck oriented object')
}
复制代码
  • 函数声明优先
foo()   // fuck oriented object
var foo = 1
function foo() {
  console.log('fuck oriented object')
}
console.log(foo)  // 1

/*提升后*/
function foo() {
  console.log('fuck oriented object')
}
var foo
foo()
foo = 1
复制代码
  • 重复的变量声明会被忽略
foo()  // 2
var foo
function foo() {
   console.log(1)
}
foo = function () {
  console.log(2)
}

/*提升后*/

function foo() {
   console.log(1)
}
foo() 
foo = function () {
  console.log(2)
}
复制代码
  • 重复的函数声明,后面会覆盖前面的
fn()  // 2
function fn() {
  console.log(1)
}
function fn() {
  console.log(2)
}
复制代码
  • let 和 const 命令声明的变量存在暂时性死区
console.log(bar)   //  报错 bar is not defined
const bar = 1
复制代码
console.log(foo)  // 报错 foo is not defined
let foo = 2
复制代码

至于let和const声明的变量存不存在提升推荐看下这篇文章: 我用了两个月的时间才理解 let

转载于:https://juejin.im/post/5b90d202f265da0ab5035918

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值