在使用 JavaScript 时,许多人发现封装匿名函数语法很有趣。而语法 (function(){})();无缝工作,尝试使用 function(){}();事实证明是徒劳的。要解决这种差异,需要更深入地了解 JavaScript 的语法和执行机制。
JavaScript 中的函数语法
在 JavaScript 中,命名函数遵循以下语法:
function functionName() { /* function body */ }
另一方面,匿名函数允许人们定义函数而无需为其分配名称 它。它们可以分配给变量:
var anonymousFunction = function() { /* function body */ };
封装匿名函数
匿名函数的封装包括将其括在括号中并立即执行它:
(function() { /* function body */ })();
这种技术提供了模块化并有助于避免变量冲突。
方括号的作用
两种语法之间的主要区别在于它们的解析方式。如果没有括号,则 function(){}();被解释为 FunctionDeclaration,需要名称。
相反,将函数括在括号中将其标记为 FunctionExpression,它可以在没有名称的情况下存在。括号本质上充当分组运算符,计算其中包含的表达式。
函数声明与函数表达式
函数声明和函数表达式具有不同的语法和行为。函数声明,如 foo(),必须有一个名称,并且只能出现在全局作用域或其他函数体内。
函数表达式,如 (function () {}),允许可选命名并可用于任何需要表达式的上下文。
结论
两种形式的匿名函数语法实现了封装代码块的相同目标,括号的存在或不存在分别决定了作为 FunctionDeclaration 或 FunctionExpression 的解释。理解这些概念及其语法上的细微差别使开发人员能够编写有效且可维护的 JavaScript 代码。
以上是为什么 `(function(){})();` 在 JavaScript 中可以工作,但 `function(){}();` 却失败?的详细内容。更多信息请关注PHP中文网其他相关文章!