作用域:变量和函数可访问的内容
作用域可分为两种:局部作用域,全局作用域
局部作用域:只在固定的代码片段中可以访问
全局作用域:在代码的任何地方都可以访问
全局作用域存在的几种形式:
1.最外层函数和最外层函数外面定义的变量拥有全局作用域
2.所有未定义直接赋值的变量自动具有全局作用域
3.所有window对象的属性都拥有全局作用域
局部变量存在形式:
函数内部声明,并且以var修饰的变量是局部变量
函数的参数
作用域链:
在js中,万物皆对象,函数也是一个对象,拥有可以通过代码访问的属性和一系列的仅供js引擎所访问的内部属性,其中一个属性就是[[scope]],[[scope]]中包含了函数被创建的作用域中对象的集合,这个集合就被称为函数的作用域链,它决定了哪些数据能被访问
当代码在环境中执行的时候,就会形成作用域链,他的用途是保证对执行环境中有访问权限的变量和函数进行有序访问
每个环境都可以向上搜索作用域链,以查询变量和函数名,但任何环境都不能向下搜索作用域链而进入另一个执行环境