【发布时间】:2014-06-07 17:29:12
【问题描述】:
很久以前,我已经阅读了很多关于 javascript 编码约定的内容,我想要决定的事情之一是声明函数的更好方法。我终于以某种方式坚持了
var func_name = function(){};
版本,因为它在某些情况下似乎更有用,但直到现在我才真正找到它们之间不会以相同方式工作的东西。
我正在编写一个应该返回一个新函数以在 setTimeout 命令中使用的函数,但我无法让它正常工作,并且在我将整个事情简化为这个测试代码之后:
var test = new function(x) {
return function() {
if (x % 2 == 1) {
console.log('a');
}
else {
console.log('b');
}
x++;
};
};
我碰巧试试如果写在
function func_name(){}
样式会有所帮助(因为我真的看不出我的代码有问题),有趣的是这段代码
function test(x) {
return function() {
if (x % 2 == 1) {
console.log('a');
}
else {
console.log('b');
}
x++;
};
}
似乎运行良好。 一个奇怪的发现是,在控制台中玩了一会儿后,我意识到第一个实际上变成了它应该生成的函数。
我也在 Chrome 和 Firefox 中测试过,我也尝试过这样使用它
var test = new function(x) {
var result = function() {
if (x % 2 == 1) {
console.log('a');
}
else {
console.log('b');
}
x++;
};
return result;
};
但我无法让它工作。
我会对这种现象的任何解释感兴趣,如果有办法使这种类型的函数声明能够产生函数,我也会很着迷。
提前致谢!
编辑:我不知道如何,但不知何故,new 关键字错误地到达了那里:D(甚至由于我愚蠢的复制粘贴懒惰进入了第三个版本.....)
不过,我仍然想知道为什么函数会变成它应该创建的东西!
【问题讨论】:
-
不要使用
new,只使用var test = function() ... -
谢谢!!!我不知道我怎么能忽略这一点......(我不打算在那里写,我不知道这是怎么发生的XD)我仍然有兴趣知道为什么它会变成它应该生成的内容1
标签: javascript function closures