js系列九:作用域与作用域链

在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());

js系列九:作用域与作用域链_第1张图片
在实践中,无论是从避免多人协作带来的冲突的角度问题,还是从性能上优化的角度考虑,我们都要尽可能少得自定义全局变量和方法。

函数作用域
函数作用域中声明的变量与方法,只能被下层子作用域访问,而不能被其他不相干的作用域访问。

function foo() {
	var a = 20;
	var b = 30;
}
foo();
function bar() {

你可能感兴趣的:(作用域与作用域链,javascript入门到进阶,js系列九:作用域与作用域链)