首页 > 代码库 > JavaScript 匿名函数和闭包

JavaScript 匿名函数和闭包

// 1 匿名函数的定义与使用
// 1.1 把匿名函数赋值给变量 通过变量执行
var box = function() {
    return "Lee";
}
box(); // "Lee"

// 1.2 通过自我执行来执行匿名函数
// (匿名函数)();
(function() {
    return "Lee";
})(); // "Lee"

// 1.3 匿名函数自我传参
(function(age) {
    return age;
})(100); // 100
// 2 闭包
// 2.1 闭包函数
function box() {
    return function() {
        return 10;
    }
}
box(); // 见下
/*
function (){
    return 10;
}
*/
box()(); // 10

// 2.2 通过闭包返回局部变量
function box() {
    var age = 100;
    return function() {
        return age;
    };
}
box(); // 见下
/*
function (){
    return age;
}
*/
box()(); // 100

// 2.3 使用匿名函数实现局部变量驻留内存中从而累加
function box() {
    var age = 100;
    return function() {
        age++;
        return age;
    }
}
var b = box();
b(); // 101
b(); // 102
b(); // 103
// 销毁引用 等待垃圾收集器来清理
b = null;

// 2.4 关于闭包的this对象
// window是js里最大的全局对象
// this在不同的作用域所指对象不同但指向的都是对象本身
// this指window对象
this; // Window {...}
this.name = "window";
var box = {
    name: "box",
    getName: function() {
        return function() {
            // 闭包函数内 this指window对象
            return this.name;
        }
    }
}
box.getName()(); // "window"
// 对象冒充
box.getName().call(box) // "box"
var box = {
    name: "box",
    getName: function() {
        // 闭包函数外 this指box对象
        var that = this;
        return function() {
            return that.name;
        }
    }
}
box.getName()(); // "box"

 

JavaScript 匿名函数和闭包