首页 > 解决方案 > 调用命名函数表达式

问题描述

我可以立即调用(调用)一个没有像这样的变量名的命名函数表达式吗?

var bookingMask = function (ac) {
....
}('.selectDates');

标签: javascript

解决方案


如果您真的是指“命名”函数表达式,是的,您可以这样做:

(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那里的关键字的表达式,你不需要 wrapper (),这很好:

var bookingMask = function nameForTheFunctionHere(ac) {
    // ...
}('.selectDates');

...但无论如何我倾向于保留它们,因为在阅读代码时很容易错过(...)最后的。


您也可以不使用名称(只需bookingMask在上面删除),但您确实特别说“命名”,所以... :-)


(如果有人想知道为什么这个答案有四个反对票,当我第一次发布答案时,我错过了 OP 提到了一个命名函数表达式这一事实,尤其是因为问题中没有一个。有几个人很友善让我知道,以便我可以修复它。但人们最初对错误的答案进行了投票。)


推荐阅读