我无法弄清楚以下代码有什么问题,为什么当我使用第二种方式时它会起作用。谁能帮助我理解这个?
我有以下Javascript代码:
var clsFunc = function(prefix) {
var id = 0;
return function() {
id = id + 1;
console.log(prefix + id);
}
}
第一种方式(不起作用):
如果我试图像这样调用这个函数没有任何反应
clsFunc('div')
第二种方式(工作)
var getId = {'div': clsFunc('div')}
getId.div()
结果:
div1
undefined
getId.div()
结果:
div2
答案 0 :(得分:2)
clsFunc
函数创建函数并返回它。所以只是做
clsFunc('div');
...毫无意义,因为它会创建一个函数,然后将其丢弃,因为您没有将它存储在任何地方。
第二种方式存储在对象属性中创建的函数。该函数引用了创建它的上下文(对clsFunc
的调用),即使该调用已返回,其中包含id
变量。当你调用函数(getId.div()
)时,它会向id
添加1然后输出前缀("div"
),然后输出新值id
(1,然后是2) ,然后,3,等等。)
第二种方式不需要对象,只需使用变量:
var clsFunc = function(prefix) {
var id = 0;
return function() {
id = id + 1;
console.log(prefix + id);
}
};
var f = clsFunc('div');
f(); // "div1"
f(); // "div2"
(你看到的undefined
只是因为你在JavaScript控制台中运行它,它显示了调用函数的结果;因为函数没有返回任何内容,调用的结果它是undefined
。)