想要得到一些意见。在编写Javascript时,我习惯于创建这样的函数:
function firstThing() {
console.log("first");
};
我正在关注教程,并看到了这个设置。使用变量赋值,然后传递一个匿名函数,然后......成为函数名。是否有理由将其用于上述“传统”方式?
var secondThing = function() {
console.log("second");
};
调用它们是一样的:
firstThing()
secondThing()
答案 0 :(得分:3)
这称为函数表达式:
var foo = function() {}
这是一个函数声明:
function foo() {}
主要区别在于功能声明是“悬挂的”。在幕后,函数声明被“提升”到其作用域的顶部并分配给变量名称 - 实际上与函数表达式相同。
考虑一下:
foo(); //logs 'abc'
function() {
console.log('abc');
}
这样可行,因为foo
将被悬挂。使用函数表达式,这将失败:
foo(); //foo is not defined!
var foo = function() {
console.log('abc');
}
关于函数表达式的一个很棒的事情是,您可以使用IIFE(立即调用的函数表达式)分配它们的值,并具有这样的私有值和函数:
var myFunc = (function() {
function thisWillBeMyFunc() {
doOne();
doTwo();
doThree();
}
function doOne() {
console.log('Action 1!');
}
function doTwo() {
console.log('Action 2!');
}
function doThree() {
console.log('Action 3!');
}
return thisWillBeMyFunc;
}());
myFunc(); //logs the actions
doOne(); //error - not defined!
<强> Live demo (click). 强>
哦,JavaScript的强大功能和灵活性!
答案 1 :(得分:1)