搜索
您的当前位置:首页正文

结果输出---闭包

来源:哗拓教育

 对象中,this.x和x的区别

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

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"

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top