这两个使用父类的函数闭包有什么区别吗?
Is there any difference with these two function closures using parens?
在JS中使用这两种类型的函数有什么区别吗?在第二个函数中,它被包装在圆括号中,用于额外的闭包。但这真的有区别吗?
var test2 = function () {
var open = function () { }
return {
open: open
};
}();
var test = (function () {
var open = function () {
};
return {
open: open
};
})();
不,没有区别,但许多人会在函数声明周围加上括号,因为如果省略变量声明,这将是不正确的javascript语法:
function () { // javascript parser gives an error here
var open = function () { }
return {
open: open
};
}();
(function () {
var open = function () {
};
return {
open: open
};
})(); // this works just fine.
所以出于习惯,我可能会使用括号。这样其他开发者就不用挠头思考"这是允许的吗?"
没有。由于函数出现在=
之后,解析器期望得到一个表达式。在IIFE之前看到(
的唯一原因是需要让解析器期望看到表达式。如果解析器期望看到语句或表达式,并且它看到了function
,那么它假设它找到了一个函数声明而不是函数表达式,因此在这种情况下(对于IIFE)没有(
将导致解析错误。
在这个上下文中,没有。
JavaScript有function expressions
和function statements
。您的示例的语法在操作符后面有function
关键字,因此JavaScript编译器知道您有function expression
。
使用父类是可取的,因为它给人类读者一个提示,下面的代码是一个IIFE,而不是一个常规的函数调用。
另外在没有操作符的情况下,父操作符的作用是不同的。
(function() { /* do stuff }())
与
完全不同function() { /* do stuff }()
相关文章:
- 使用闭包/函数绑定将自函数作为回调传递
- 了解 JavaScript 闭包函数
- 传递多个参数的闭包函数
- 将“(0)”附加到此闭包函数的目的是什么
- 如何复制(新实例)闭包函数
- Javascript 闭包函数参数
- 具有闭包函数作用域的意外行为
- javascript闭包函数可以由用户更改吗
- Javascript:是这个闭包函数
- 为什么闭包函数中的 javascript 变量在多次调用时不会重置为默认值
- Js闭包:函数在第二次调用时失败
- 如何存储闭包函数返回的变量
- javascript闭包函数的用法
- JavaScript闭包函数传递给事件监听器
- 闭包函数问题
- & # 39;这个# 39;匿名闭包函数内部
- 在JavaScript中实现自动记忆(返回闭包函数)
- 不理解闭包函数是如何工作的
- Javascript闭包函数
- 为javascript闭包函数编写jasmine测试规范