javascript - 在闭包作用域中设置变量

标签 javascript closures

我想我明白为什么变量存在于它们声明的函数之外,因为你正在返回另一个函数:

myFunction = function() {
    var closure = 'closure scope'
    return function() {
        return closure;
    }
}
A = myFunction(); // myFunction returns a function, not a value
B = A(); // A is a function, which when run, returns:
console.log(B); // 'closure scope'

按照现在的写法,调用 A() 就像一个 getter。

问:如何编写 myFunction 以便调用 A(123) 是一个 setter?

最佳答案

尝试以下操作:

myFunction = function() {
    var closure = 'closure scope'

    // value is optional
    return function(value) {
        // if it will be omitted
        if(arguments.length == 0) {
            // the method is a getter
            return closure;
        } else {
            // otherwise a setter
            closure = value;
            // with fluid interface ;)
            return this;
        }
    }
}
A = myFunction(); // myFunction returns a function, not a value
A(123); // set value
B = A(); // A is a function, which when run, returns:
console.log(B); // '123'

关于javascript - 在闭包作用域中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735821/

相关文章:

javascript - Firebase Messaging v1 401 Project Not Permitted 错误

javascript - 如何使用 PHP/CURL/Javascript 等从 mca.gov.in 获取公司详细信息?

javascript - Jquery 根据选择值创建输入元素数量

javascript - Mongoose 只按时间排序日期

ios - 当作为 Objective-C block 调用时,Swift 闭包崩溃

javascript - class 和 id 名称拼写错误的预防工具

javascript - 点击事件监听器关闭时遇到困难

javascript - JS/TS必须使用bind但仍需要原来的this

javascript - 新手: Making sense Javascript closure example on MDN

Dart:闭包研究