483 作用域链机制

作用域链查找机制,关键在于如何查找上级作用域:
1、从函数创建开始,作用域就已经指定好了;
2、当前函数是在哪个作用域(N)下创建的,那么函数执行形成的作用域(M)的上级作用域就是N,**和函数在哪执行无关,只和创建的位置有关**。
var n = 1;
function fn() {
    var n = 2;
    function f() {
        n--;
        console.log(n);
    }
    f();
    return f;
}
var x = fn();
x();
console.log(n);

var i = 0;
function A() {
	var i = 10;
	// 函数X是在A的私有作用域中创建的
	function x() {
		console.log(i);
	}
	return x;
}

var y = A(); // => y=x
y(); // 10 ,在函数x执行前,i已经赋值完成

function B() {
	var i = 20;
	y();
}
B(); // 10


// 延伸
var i = 10;
// 函数X是在A的私有作用域中创建的
function x() {
    console.log(i);
}

x()  // 10


// 相当于下面的代码
var i
function x() {
    console.log(i);
}

i = 10
x() // undefined,因为在i赋值前执行函数


// ----------------------


// 变体
var i
function x() {
    console.log(i);
}

x() // undefined,因为在i赋值前执行函数

i = 10

posted on 2020-06-25 21:08  冲啊!  阅读(182)  评论(0编辑  收藏  举报

导航