"js中的作用域与变量声明提升?"

js中的作用域与变量声明提升?

变量提升的表现是,无论我们在函数中何处位置声明的变量,好像都被提升到了函数的首部,我们可以在变量声明前访问到而不会报错。

造成变量声明提升的本质原因是 js 引擎在代码执行前有一个解析的过程,创建了执行上下文,初始化了一些代码执行时需要用到的对象。当我们访问一个变量时,我们会到当前执行上下文中的作用域链中去查找,而作用域链的首端指向的是当前执行上下文的变量对象,这个变量对象是执行上下文的一个属性,它包含了函数的形参、所有的函数和变量声明,这个对象的是在代码解析的时候创建的。这就是会出现变量声明提升的根本原因。

提升前:

console.log(foo) // undefined
var foo = '123'

bar() // 456
function bar() {
    console.log('456')
}

zoo() // zoo is not a function
var zoo = function() {
  console.log('789')
}

提升后:

var foo = undefined
var zoo = undefined
function bar() {
  console.log('456')
}

console.log(foo) // undefined
foo = '123'
bar() // 456
zoo() // zoo is not a function
zoo = function() {
  console.log('789')
}
PS:写作不易,如要转裁,请标明转载出处。
登录
注册
回顶部