Javascript 替代函数与原函数var的区别
谢谢你的帮助。很抱歉,我不知道我使用的概念的确切名称 我有一个这样的函数Javascript 替代函数与原函数var的区别,javascript,Javascript,谢谢你的帮助。很抱歉,我不知道我使用的概念的确切名称 我有一个这样的函数 var counter = function() { var count = 0; function changeCount(number) { count += number; } return { increase: function() { changeCount(1); }, decrease: function() { changeCoun
var counter = function() {
var count = 0;
function changeCount(number) {
count += number;
}
return {
increase: function() {
changeCount(1);
},
decrease: function() {
changeCount(-1);
},
show: function() {
alert(count);
}
}
};
现在,我要用这个函数做'3',似乎有两种方法
(一)
我猜这会抛出“3”,但答案是“0”
(二)
现在返回'3'作为答案。
这是我的问题。从字面上看,变量“另一个”与“counter()”完全相同。
那么,为什么答案会不同呢
前一个代码(counter().increase())似乎在每3行“counter().increase()”之后将“count”返回到“o”。
而'other.increase()'似乎是累积变量'count'的变化。
两个代码之间的区别只是说“变量‘另一个’与counter()相同”。为什么这会导致如此不同的答案?看看计数器函数的作用 它创建一个变量,将其设置为0,然后返回一些函数 若你们给柜台打一次电话,它就会打一次。如果你叫它三次,它就会叫三次 (然后对返回值调用
.increase()
,在第一个示例中,这是三个不同的东西,但在第二个示例中,每次都是相同的东西)
或者换一种说法 如果,每次你打电话给
柜台
时,你都会拿一张干净的纸放在面前。每次你打电话给rease时,你都会在面前的一张纸上画一个勾号
你要么得到三张纸,每张纸上都有一个记号,要么得到一张纸上有三个记号。看看计数器功能的作用 它创建一个变量,将其设置为0,然后返回一些函数 若你们给柜台打一次电话,它就会打一次。如果你叫它三次,它就会叫三次 (然后对返回值调用
.increase()
,在第一个示例中,这是三个不同的东西,但在第二个示例中,每次都是相同的东西)
或者换一种说法 如果,每次你打电话给
柜台
时,你都会拿一张干净的纸放在面前。每次你打电话给rease时,你都会在面前的一张纸上画一个勾号
你要么得到三张纸,每张纸上都有一个记号,要么一张纸上有三个记号。我知道这已经得到了回答,但为了澄清(因为我已经打过了): 您的
计数器每次都返回一个新对象,每个对象都有自己的函数声明(增加、减少、显示)。因此,每次调用counter()都会得到该对象的一个新的独立实例,其函数不存在于该实例的范围之外
因此:
//这是:
计数器()增加();
//与此等效:
常数c1=计数器();
c1.增加();
//如果你反复这么做:
计数器().增加();//新实例
计数器().增加();//新实例
计数器().增加();//新实例
计数器().show();//新实例
//你实际上在做:
常数c1=计数器();
c1.增加();
常数c2=计数器();
c2.增加();
常数c3=计数器();
c3.增加();
常数c4=计数器();
c4.show();
//而这会对同一对象调用三次crease():
const另一个=计数器();
另一个。增加();
另一个。增加();
另一个。增加();
我知道这已经得到了回答,但为了澄清(因为我已经输入了):
您的计数器每次都返回一个新对象,每个对象都有自己的函数声明(增加、减少、显示)。因此,每次调用counter()都会得到该对象的一个新的独立实例,其函数不存在于该实例的范围之外
因此:
//这是:
计数器()增加();
//与此等效:
常数c1=计数器();
c1.增加();
//如果你反复这么做:
计数器().增加();//新实例
计数器().增加();//新实例
计数器().增加();//新实例
计数器().show();//新实例
//你实际上在做:
常数c1=计数器();
c1.增加();
常数c2=计数器();
c2.增加();
常数c3=计数器();
c3.增加();
常数c4=计数器();
c4.show();
//而这会对同一对象调用三次crease():
const另一个=计数器();
另一个。增加();
另一个。增加();
另一个。增加();
可能只是使用“()”的区别()表示要在括号前执行(或打开)变量或函数
像这样稍微调整代码
var counter = (function() {
var count = 0;
function changeCount(number) {
count += number;
}
return {
increase: function() {
changeCount(1);
},
decrease: function() {
changeCount(-1);
},
show: function() {
alert(count);
}
}
})();
counter.increase()
counter.increase()
counter.increase()
counter.show()
然后返回“3”。唯一的区别是使用了“()”。
如果你不使用“()”,这意味着你不会执行它。所以您可以处理已经打开的上下文。可能只是使用“()”的区别()表示要在括号前执行(或打开)变量或函数
像这样稍微调整代码
var counter = (function() {
var count = 0;
function changeCount(number) {
count += number;
}
return {
increase: function() {
changeCount(1);
},
decrease: function() {
changeCount(-1);
},
show: function() {
alert(count);
}
}
})();
counter.increase()
counter.increase()
counter.increase()
counter.show()
然后返回“3”。唯一的区别是使用了“()”。
如果你不使用“()”,这意味着你不会执行它。因此,您可以处理已打开的上下文。谢谢您的评论。然而,变量“另一个”不是一样吗?每次我调用“另一个”时,它都会调用“计数器”函数,并且每次都执行相同的操作。创建变量,将其设置为0。但答案是‘不一样’。那为什么呢?@yubin-你从来没有给别人打过电话。它是另一个
而不是另一个()。(由于other
不是一个函数,如果您执行了other()
,它将抛出一个异常)另一张
只是摆在你面前的一张纸,它不是获取一张新纸的指令集。非常感谢!!谢谢你的评论。然而,变量“另一个”不是一样吗?每次我调用“另一个”时,它都会调用“计数器”函数,并且每次都执行相同的操作。创造
var counter = (function() {
var count = 0;
function changeCount(number) {
count += number;
}
return {
increase: function() {
changeCount(1);
},
decrease: function() {
changeCount(-1);
},
show: function() {
alert(count);
}
}
})();
counter.increase()
counter.increase()
counter.increase()
counter.show()