作用域和作用域链

51 阅读1分钟

执行环境

分为全局执行环境函数执行环境

全局执行环境

  • 全局环境中,变量和函数都是window对象的属性和方法
  • 代码载入时,创建全局执行环境
  • 关闭标签页或浏览器时,销毁全局环境


注意:全局环境下, 这三种写法是等价的。

var str = '123'
str = '123'
window.str = '123'

函数执行环境

  • 函数运行时开启(注意创建时没有开启)
  • 函数运行完销毁

作用域

分为变量作用域函数作用域

变量作用域

  • 全局变量在函数内外都可以访问
  • 函数内的变量,只能在函数内访问

全局变量的优缺点:
优点:作用范围广,减少参数传递带来的时间消耗
缺点:全局变量会驻留内存;破坏函数的封装性;造成全局污染

函数作用域

作用域链

// 在func2中找不到变量a,就会往func1找,func1找不到,就会往全局环境找。
var a = 1
function func1 () {
    var b = 2
    function func2 () {
        var c = 3
        console.log(a)
    }
}