javascript - 调用命名函数表达式
问题描述
我可以立即调用(调用)一个没有像这样的变量名的命名函数表达式吗?
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
那里的关键字的表达式,你不需要 wrapper ()
,这很好:
var bookingMask = function nameForTheFunctionHere(ac) {
// ...
}('.selectDates');
...但无论如何我倾向于保留它们,因为在阅读代码时很容易错过(...)
最后的。
您也可以不使用名称(只需bookingMask
在上面删除),但您确实特别说“命名”,所以... :-)
(如果有人想知道为什么这个答案有四个反对票,当我第一次发布答案时,我错过了 OP 提到了一个命名函数表达式这一事实,尤其是因为问题中没有一个。有几个人很友善让我知道,以便我可以修复它。但人们最初对错误的答案进行了投票。)
推荐阅读
- javascript - 过滤重复项的最佳方法?
- ios - UIControl subclass is receiving "touchesCancelled" instead of "touchesEnded"
- c# - 无法在 C# .NET4.5.2 中启动 Selenium RemoteWebDriver 实例
- jenkins - 升级后构建添加了错误版本的 mscorlib(尝试加载格式不正确的程序)
- android - 每次打开相机时应用程序都会崩溃
- php - Laravel 5.5 and PHP incompatibility
- c# - Integer array Get difference between two highest numbers
- sql-server - Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fnCustomDate", or the name is ambiguous
- cypress - 无法在 Cypress Chrome 中打开内部页面
- c# - 将数据从一个数据库批量复制或更新到另一个数据库