javascript - 打破一个闭包来向外行解释它

标签 javascript closures

我已经得到了这个,并且它有效:

myObject.myFunction = (function() {
    var closure = 0;

    return function(value) {
        if (arguments.length) {
            closure = value;
        } else {
            return closure;
        }
    }
})();

它既充当 getter 又充当 setter,因此调用 myFunction(3.14) 将设置闭包,而调用 myFunction() 将获取闭包的值。

问:我可以把它分成一个更冗长的例子(而不是荒谬的)吗?我想做的是这样的:

myObject.myFunction1 = myFunction2;
myObject.myFunction1();

function myFunction2() {
    var closure = 0;

    return function(value) {
        if (arguments.length) {
            closure = value;
        } else {
            return closure;
        }
    }
}

我只是想将 JavaScript 分解成尽可能小的 block ,以便我的学生能够集中注意力。

编辑1:

哦等等:我根本不需要 myFunction2。

最佳答案

您是否只是在寻找最简单的方法来解释闭包,例如:

function closure() {
    var privateData = "I'm hidden!";

    return {
        get: function () {
            return privateData;
        },
        set: function (arg) {
            privateData = arg;
        }
    };
}

var privateDataAccess = closure();

console.log(typeof (privateData)); // logs undefined -- privateData is out of scope
console.log(privateDataAccess.get()); // logs "I'm hidden!"
privateDataAccess.set("Now you changed me!");
console.log(privateDataAccess.get()); // logs "Now you changed me!"

这可能就是我认为的那么简单:-)

关于javascript - 打破一个闭包来向外行解释它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090745/

相关文章:

javascript - 您如何通过 JavaScript/Ajax 代码管理 Infragistics WebGrid 数据?

javascript - 这个符号 "/^\s*$/.test(val)"是什么意思

ios - 在 swift 中使用带有参数的预定义函数作为完成 block

closures - 如何测试函数和闭包的相等性?

javascript - 在 javascript 的父闭包中引用 "this"

javascript - 在 onload() 函数调用中将 session 变量作为参数传递

javascript - Celery+Django+jQuery -- 在 jQuery 中报告 celery 任务的成功/失败

javascript - 如何从 Chrome 扩展中的弹出窗口访问后台页面中的对象

lua - 从 C 回调闭包时 GC 中的 MemFault

iterator - 如何从函数返回迭代器并使用它?