setTimeout(function() {doSth();}, 3) vs setTimeout(doSth, 3)?
setTimeout(function() {doSth();}, 3) vs setTimeout(doSth, 3)?
以上,哪个更好?为什么要使用
setTimeout(function() { anotherFunction(); }, 3);
而不是
setTimeout(anotherFunction, 3);
?
例如,the documentation for the testing tool jasmine使用了一个不带参数的匿名内部函数。但为什么?匿名函数样式的advantages/disadvantages是什么?
主要优点是变量存在的范围。
以这两种情况为例:
场景 1
function foo() {
let element = document.getElementById('bar');
element.classList.add('some-effect');
setTimeout(function() {
element.classList.remove('some-effect');
}, 1000);
}
场景 2
function foo() {
let element = document.getElementById('bar');
element.classList.add('some-effect');
setTimeout(removeEffect, 1000);
}
function removeEffect() {
let element = document.getElementById('bar');
element.classList.remove('some-effect');
}
在第一种情况下,您可以访问 element
,因为您在 foo
函数的范围内。
在第二个中,您必须再次搜索 removeEffect
函数中的元素,因为范围已更改。
如果需要复用工作范围内的变量,使用第一种场景的代码。如果您真的不需要作用域中的变量或想让函数可重用,请使用第二种方案
以上,哪个更好?为什么要使用
setTimeout(function() { anotherFunction(); }, 3);
而不是
setTimeout(anotherFunction, 3);
?
例如,the documentation for the testing tool jasmine使用了一个不带参数的匿名内部函数。但为什么?匿名函数样式的advantages/disadvantages是什么?
主要优点是变量存在的范围。
以这两种情况为例:
场景 1
function foo() {
let element = document.getElementById('bar');
element.classList.add('some-effect');
setTimeout(function() {
element.classList.remove('some-effect');
}, 1000);
}
场景 2
function foo() {
let element = document.getElementById('bar');
element.classList.add('some-effect');
setTimeout(removeEffect, 1000);
}
function removeEffect() {
let element = document.getElementById('bar');
element.classList.remove('some-effect');
}
在第一种情况下,您可以访问 element
,因为您在 foo
函数的范围内。
在第二个中,您必须再次搜索 removeEffect
函数中的元素,因为范围已更改。
如果需要复用工作范围内的变量,使用第一种场景的代码。如果您真的不需要作用域中的变量或想让函数可重用,请使用第二种方案