传递参数:目标javascript

时间:2012-09-06 20:17:47

标签: javascript

我是Objective javascript的新手,即使我在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(calc.multiply(10,20));

提前致谢..

7 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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();

否则,你必须修改每个方法以接受正式的论点......

答案 2 :(得分: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;
            }
        }
    }
};

答案 3 :(得分: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));​

答案 4 :(得分: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函数使您的比较更安全。

希望这有帮助。

答案 5 :(得分: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;
            }
        }
    }
})();​

虽然我会考虑将警报更改为抛出错误。

答案 6 :(得分: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;
    }
};​

否则,对于使用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;
        }
    };
}