在javascript中,作用域是用来规定变量与函数可访问范围的一套规则。
1. 1作用域:全局作用域、局部作用域
全局作用域中声明的变量与函数可以在代码的任何地方被访问。
什么情形才会拥有作用域?
(1)全局对象下拥有的属性和方法:window.name , window.location, window.top ......
(2)在最外层声明的变量与方法:即在全局上下文声明的变量和方法。
(3)在非严格模式下,函数作用域中未定义但直接赋值的变量和方法。即在函数中未使用关键字声明的变量。
1.2函数作用域
函数作用域中声明的变量和方法,只能被下层子作用域访问,而不能被其他不相干的作用域访问。
ES6之前,没有块级作用域。
1.3模拟块级作用域
var arr = [1,2,3,4,5,6]
(function() {
for(var i = 0; i<arr.length; i++) {
console.log(i)
}
})() 即函数自执行。i 仅在函数中生效,或者在匿名函数前加+ 、- 、!,此三种方式不必用括号包裹函数。当我们使用ES5时,往往通过函数自执行的方式来实现模块化。
2.作用域链scope chain:
是当前执行环境与上层执行环境的一系列变量对象组成的,保证了当前执行环境对符合访问权限的变量和函数的有序访问。
var a = 20;
function test() {
}