我是JavaScript的新手,我试图了解是否有理由在if / else块中创建两个匿名函数,而不是创建一个匿名函数并将整个if / else块放在其中功能
我正在进行的教程(Code School)建议提醒以下两个选项之一:
var greeting;
var newCustomer = false;
if (newCustomer) {
greeting = function () {
alert("Hello, new customer.")
};
} else {
greeting = function () {
alert("Hello, returning customer.")
};
}
welcome(greeting);
function welcome(message) {
message();
}
当我在没有参考教程的情况下尝试编写时,我最终编写了这个,这产生了与上面相同的结果:
var greeting;
var newCustomer = false;
var greeting = function () {
if (newCustomer) {
alert("Hello, new customer.")
} else {
alert("Hello, returning customer.")
}
}
welcome(greeting);
function welcome(message) {
message();
}
答案 0 :(得分:0)
与几乎所有情况一样,这取决于具体情况,最佳方法取决于您需要做什么。在这个人为的例子中很难说哪个更好,但第一种方法有一些优点,因为如果在创建newCustomer
时已知greeting
,那么最好执行该决策逻辑前面,而不是以后再推迟。然而,如果是我,我可能不会选择这两个选项并按照DRY原则执行此操作,并且是两个世界中最好的(预先确定逻辑并且创建的函数始终保持一致):
var greetingText,
greeting;
var newCustomer = false;
if (newCustomer) {
greetingText = "Hello, new customer.";
} else {
greetingText = "Hello, returning customer.";
}
greeting = function () {
alert(greetingText);
}
welcome(greeting);
function welcome(message) {
message();
}
然后可以缩短为:
var greetingText,
greeting;
var newCustomer = false;
greetingText = "Hello, " + (newCustomer ? "new" : "returning") + " customer.";
greeting = function () {
alert(greetingText);
}
welcome(greeting);
function welcome(message) {
message();
}
答案 1 :(得分:0)
我猜不同之处在于评估if
语句的不同时刻。在第一种情况下,它立即评估一次,在第二种情况下每次调用该函数。
因此,如果条件无法改变,您将使用第一种方式,因此没有理由一遍又一遍地评估它。例如,当您测试特定方法的浏览器支持时。
并且你将if
语句放在函数中是出于完全相反的原因。