我正在使用 Node.js。
你能说出使用这个(闭包)的优点在哪里吗:
function sayHello() {
var num = 0;
var sayAlert = function (val) {
num++;
console.log(num);
}
return sayAlert;
}
关于这个古老的经典:
function sayHello2() {
var num = 0;
this.sayAlert = function (val) {
num++;
console.log(num);
}
}
<小时/>
var ee1 = sayHello();
ee1(5);
ee1(6);
var ee2 = new sayHello2();
ee2.sayAlert(5);
ee2.sayAlert(6);
(更短的代码可能用于闭包和更多“JavaScipt 方式”?)
最佳答案
看起来你真正想要的是一个带有静态计数器的函数。为此,您可以使用立即执行的函数。
var say = (function() {
var num = 0;
return function (val) {
// Not sure why you're passing val here, it's not used
num++;
console.log(num);
}
})();
除非您想要的是多个计数器,否则您应该使用更好的名称,以便所有阅读它的人都清楚。
function createCounter() {
var num = 0;
return function () {
console.log(++num);
}
}
在第二个示例中,您通过在构造函数的闭包上使用计数器来实现相同的功能,我们将其称为“Speaker”。
function Speaker() {
var num = 0;
this.sayAlert = function() {
console.log(++num);
}
}
他们都做同样的事情
say(); say(); //outputs 1,2
var speaker = new Speaker();
speaker.sayAlert(); speaker.sayAlert(); //outputs 1,2
var speaker2 = new Speaker();
speaker2.sayAlert(); speaker2.sayAlert(); //outputs 1,2
var ctr1 = createCounter(); ctr1(); ctr1(); //outputs 1,2
var ctr2 = createCounter(); ctr2(); ctr2(); //outputs 1,2
使用哪一个取决于您想要函数还是对象。主要是您更喜欢编写函数式代码还是面向对象代码。
关于javascript - 封闭类与经典类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504430/