js的变量提升、函数提升

2021-05-18  本文已影响0人  拖孩

ES6新增的let和const关键字不存在提升的现象,会报出异常 ReferenceError

变量提升

js引擎预编译期间会将变量声明提升至当前作用域的最顶端。

console.log(a) // undefined
var a = 1
console.log(a) // 1

var fn = function () {
  console.log(b) // undefined
  var b = 2
  console.log(b) // 2
}
fn()

函数提升

js引擎预编译期间会将函数声明提升至当前作用域的最顶端,但不会提升函数表达式。

console.log(fn) // [Function fn]
fn() // fn
function fn () {
  console.log('fn')
}
fn() // fn

console.log(fn2) // undefined
fn2() // fn2 is not a function
var fn2 = function () {
  console.log('fn2')
}
fn2() // fn2
var a = 1
function fn () {
  a = 10
  console.log(a) // 10
  return
  function a () {}
}
fn()
console.log(a) // 1

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

var a = 1
function foo() {
  var a = function () {}
  a = 10
  console.log(a)
  return
}
foo()
console.log(a)
上一篇 下一篇

猜你喜欢

热点阅读