在javascript中,作用域是用来规定变量与函数可访问范围的一套规则。
作用域
最常见的作用域有两种,分别是全局作用域与函数作用域。
全局作用域中声明的变量与函数可以在代码的任何地方被访问。
一般来说,以下三种情况拥有全局作用域。
1 全局对象下拥有的属性和方法
window.name
window.location
window.top
window.window
2 在最外层声明的变量与方法
我们知道,全局上下文中的变量对象实际上就是window对象本身,因此在全局上下文中声明的变量与方法其实就变成了window的属性和方法,所以他们拥有全局作用域。
var foo = function() {};
var str = "out variable";
var arr = [1,2,3];
function bar() {};
3 在非严格模式下,函数作用域中未定义但是直接复制的变量与方法。
在非严格模式下,这样的变量与方法会自动变成全局作用域对象 window 的属性,因此他们拥有全局作用域。
function foo() {
bar = 20;
}
function fn() {
foo();
return bar + 30;
}
console.log(fn());
在实践中,无论是从避免多人协作带来的冲突的角度问题,还是从性能上优化的角度考虑,我们都要尽可能少得自定义全局变量和方法。
函数作用域