JS基础知识(2) -- 作用域和作用域链

作用域

作用域就是变量与函数的可访问范围

  • 全局作用域
  • 函数作用域
  • ES6块级作用域

ES5没有块级作用域,ES6有

for(var i=0; i<5; i++){
    var num = 10;//全局作用域
    let num2 = 3;//块级作用域
}

作用域链

每个函数都有自己的上下文对象,上下文对象中有一个重要属性:变量对象,用来保存这个上下文中定义的所有变量和函数。而作用域链就是变量对象的链表。作用域链的第一个是当前函数的活动对象(活动对象和变量对象是同一个东西在不同时期的两种叫法。函数未执行(创建上下文的期间)时叫变量对象,函数执行以后就叫活动对象),第二个是包含环境的上下文的变量对象...最后一个是全局上下文的变量对象。变量的查找会沿着作用域链逐级向后查找,如果在某个变量对象中找到了,则使用它。找不到则报错。

变量提升

变量提升只是提升变量的声明,变量的赋值不会提升。

//fn1() //error
fn2()

//函数表达式 不能提升
var fn1 = function(){
  console.log('111')
}
//函数声明 可以提升
function fn2(){
    console.log('222')
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容