JavaScript Closure - 无法识别的方法

时间:2014-03-24 18:26:32

标签: javascript closures getter-setter

我正在调用一个函数myFunc()并将其存储在一个变量myFunction中,传递3作为默认参数,将用于添加。

myFunction获取返回的匿名函数,其中包含在控制台中记录消息时传递的参数。

我也试图访问myFunction的setValue方法,将原来的值改为3比1

    <script type="text/javascript">
        function myFunc(numPassed){
            var num = numPassed;
            return function(x){
                setValue = function(newVal){
                    num = newVal;
                    return (num + x);
                };
            };
        }
        var myFunction = myFunc(3);
        myFunction.setValue(1);
        console.log(myFunction(4));
    </script>

当我运行时,它会给我错误:

对象函数(x)没有方法'setValue'

我也尝试返回setValue(),但仍然无法识别该方法。

    <script type="text/javascript">
        function myFunc(numPassed){
            var num = numPassed;
            return function(x){
                return setValue = function(newVal){
                    num = newVal;
                    return (num + x);
                };
            };
        }
        var myFunction = myFunc(3);
        myFunction.setValue(1);
        console.log(myFunction(4));
    </script>

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望myFunc创建一个函数,将其输入x添加到值numPassed,但允许numPassed被覆盖稍后使用setValue。如果是这种情况,您的代码应如下所示:

function myFunc(numPassed){
    var num = numPassed;
    function add(x) {
        return num + x;
    };
    add.setValue = function(newVal) {
        num = newVal;
    };
    return add;
}

由于myFunc返回add,您希望从返回值公开访问的所有内容都必须是add的属性。