我可以使用这样的函数返回一个var,它本身就是一个对DOM元素执行操作的函数吗?
var foo = function() {
var blah = function() {
document.getElementById('box').style.color="red";
};
return blah;
};
setTimeout(function() {
foo();
}, 2000);
<div id="box">This is some div</div>
修改
感谢所有的提示,它确实可以正常工作。 一点点跟进...... 我可以和返回的对象做类似的事吗?
var foo = function() {
var blah = function() {
document.getElementById('box').style.color="red";
};
var flop = function() {
document.getElementById('box').style.color="green";
};
return {
blah: blah,
flop: flop
};
};
var newInstance = foo();
setTimeout(function() {
newInstance.blah;
}, 2000);
setTimeout(function() {
newInstance.flop;
}, 4000);
<div id="box">This is some div</div>
答案 0 :(得分:3)
是的,你可以这样做。你的例子很接近。你想要做的是:
setTimeout(function() {
var result = foo();
result();
}, 2000);
或更简洁:
setTimeout(function() {
foo()();
}, 2000);
内部foo()
调用返回函数,现在需要通过将另一对parens粘贴到该结果上来调用该函数。
更新
此外,由于setTimeout()
期望函数作为第一个参数,你可以这样做:
setTimeout(foo(), 2000);
这样你就可以调用foo()
来返回函数,并将该函数直接传递给setTimeout()
。你的大脑晕了吗? =)
答案 1 :(得分:2)
是的,但你需要这样称呼它:
foo()();
第一组括号获取函数表达式,第二组执行函数表达式。
因为foo返回一个函数,我认为代码可以写成:
setTimeout(foo(), 2000);
答案 2 :(得分:1)
取走匿名函数包装器:
setTimeout(foo(), 2000);
当你调用“foo”时,它将传递给setTimeout
函数。您不需要将其包装在另一个匿名函数中。
答案 3 :(得分:0)
JavaScript中的函数是一等公民,所以答案是肯定的:foo()()
。