var x = 1, y = 2;
var z = function () {
var x = 2; // 局部变量 x
return {
x: x, // 对象属性 x,与局部变量 x 的初始值相同(2)
y: function (a, b) {
this.x = a + b; // 修改的是对象的属性 x
},
z: function () {
return x; // 返回局部变量 x 的当前值
}
};
};
var a = z();
a.y(x, y); // 这里将 a.y(1, 2) ,即 this.x = 1 + 2
console.log(a.z(), a.x, x); // 输出:2 3 1
this 是执行上下文中的一个属性,它指向最后一次调用这个方法的对象
let x = "global"; // 全局变量
function outer() {
let x = "outer"; // 外层函数的局部变量
return function inner() {
console.log(this.x); // 引用 this.x,最后一次调用该方法的对象,此时时全局对象
};
}
const closure = outer();
closure(); // 输出 "global"
闭包会“记住”它定义时所处的作用域链,并优先使用最近的作用域中的变量。
let x = "global"; // 全局变量
function outer() {
let x = "outer"; // 外层函数的局部变量
return function inner() {
console.log(x); // 引用了外层函数的 x
};
}
const closure = outer();
closure(); // 输出 "outer"
因篇幅问题不能全部显示,请点此查看更多更全内容