我是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));
提前致谢..
答案 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));
我所做的修改是在每个返回的函数上设置a
和b
参数,并通过严格对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;
}
};
}