5

即使我在 Javascript 方面有丰富的经验,我也是 Objective javascript 的新手。如何在这里将我的参数传递给 calc 闭包?

var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();​

    console.log(calc.divide());

我想将参数传递给像 (calc.multiply(10,20));

提前致谢..

4

7 回答 7

2

根据您的调用方法calc.multiply(a, b):应该是这样的:

var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

console.log(calc.divide(20, 2));
于 2012-09-06T20:21:47.250 回答
2

这里有一个简单的方法!

var calc = function(a,b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
};

//console.log(calc.divide());
//I want to pass the parameters to calc like (calc.multiply(10,20));

calc(10,20).multiply();

否则,您必须修改每种方法以接受形式参数...

于 2012-09-06T20:21:52.313 回答
1
var calc = function(a,b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
};
于 2012-09-07T18:02:27.570 回答
0

你的意思是这样的:

var calc = (function() {
    var a = 5;
    var b = 0;
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function(n, d) {
            if (n != 0) return n / d
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();

alert(calc.divide(3, 4));​
于 2012-09-06T20:21:59.707 回答
0

下面的代码应该适合你:

var calc = (function() {
    var a = 5;
    var b = 0;

    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b !== 0) return a / b;
            else {
                alert('division by zero');
                return false;
            }
        }
    };
})();

console.log(calc.multiply(10, 10));

我所做的编辑是在每个返回的函数上设置ab参数,并divide通过使其严格来使您在函数上与零进行比较更安全。

希望这可以帮助。

于 2012-09-06T20:22:15.263 回答
0
var calc = (function() {
    return {
        add: function(a, b) {
            return a + b;
        },
        subtract: function(a, b) {
            return a - b;
        },
        multiply: function(a, b) {
            return a * b;
        },
        divide: function(a, b) {
            if (b != 0) return a / b
            else {
                alert('division by zero');
                return false;
            }
        }
    }
})();​

尽管我会考虑将您的警报更改为引发错误。

于 2012-09-06T20:22:32.753 回答
0

您可以将参数提供给calc,它返回一个对象以使用这两个数字进行计算,或者您只需calc使用计算某事的函数创建一个对象。您的要求calc.multiply(10,20)是第二种解决方案:

var calc = {
    add: function(a, b) {
        return a + b;
    },
    subtract: function(a, b) {
        return a - b;
    },
    multiply: function(a, b) {
        return a * b;
    },
    divide: function(a, b) {
        if (b != 0) return a / b
        alert('division by zero');
        return false;
    }
};​

否则,对于 using calc(10,20).multiply(),它将构建您已经拥有的闭包,但使用参数而不是两个局部常量:

function calc(a, b) {
    return {
        add: function() {
            return a + b;
        },
        subtract: function() {
            return a - b;
        },
        multiply: function() {
            return a * b;
        },
        divide: function() {
            if (b != 0) return a / b
            alert('division by zero');
            return false;
        }
    };
}
于 2012-09-06T20:26:31.287 回答