我可以像这样不用变量名称立即调用(调用)命名的函数表达式吗?
var bookingMask = function (ac) {
....
}('.selectDates');
我可以像这样不用变量名称立即调用(调用)命名的函数表达式吗?
var bookingMask = function (ac) {
....
}('.selectDates');
(function bookingMask(ac) {
// ...
})('.selectDates');
注意使用()
将其包裹起来。否则,function
关键字会让解析器认为它是一个函数声明的开始,你不能以那种方式直接调用它。
如果你想在函数内部(例如递归)使用bookingMask
,那么你可能需要这样做。
实时示例:
(function bookingMask(ac) {
console.log("ac is: " + ac); // "ac is: .selectDates"
console.log(typeof bookingMask); // "function"
})('.selectDates');
bookingMask
是调用的结果,您也可以这样做: 最初的回答
var bookingMask = (function nameForTheFunctionHere(ac) {
// ...
})('.selectDates');
如果您这样做,因为解析器已经期望在function
关键字之后跟着一个表达式,所以您不需要包装器()
,这是可以的:
最初的回答:
如果你这样写,因为解析器在function
关键字后面已经期望一个表达式,所以你不需要用()
来包装它,直接写即可:
var bookingMask = function nameForTheFunctionHere(ac) {
// ...
}('.selectDates');
...但我仍然倾向于保留它们,因为在阅读代码时很容易忽略末尾的(...)
。
您也可以不使用名称(只需删除上面的bookingMask
),但您确实明确提到了“命名”,所以... :-)
(如果有人想知道为什么这个答案有四个反对票,当我最初发布答案时,我错过了OP提到的命名函数表达式,主要是因为问题中没有这种情况。一些人很友好地让我知道,以便我可以修复它。但人们最初对错误的答案进行投票。)
var func = function cat(){}
,要么使用括号告诉JavaScript引擎获取内部的值并将其作为表达式进行评估。因此,IFE(立即调用函数表达式)的名称来自首先将函数转换为表达式 (function(){})
然后调用它 (function(){})()
。(function(ac) {
// code...
})('.selectDates');
+function IFFE(){
}()
-function IFFE(){
}()