传递参数:Objective javascript

passing parameter : Objective javascript

本文关键字:Objective javascript 参数      更新时间:2023-09-26

我是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));

提前谢谢。。

根据您的调用方法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));

你的意思是这样的吗:

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));​
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;
            }
        }
    }
})();​

尽管我会考虑将你的警报改为抛出错误。

您可以将参数提供给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;
        }
    };
}

下面的代码应该适用于您:

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函数使其与零的比较更安全。

希望这能有所帮助。