为什么我们要在语句中两次将函数括在括号中
Why do we wrap the function in parenthesis two times in a statement?
可能的重复项:
JavaScript中自执行函数的目的是什么?
解释JavaScript的封装匿名函数语法
例如:
(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
我知道我们想创建自己的范围来防止变量冲突,但为什么 javascript 需要有 ()()?
这使它成为一个自调用的匿名函数。
(function() {
/* function body */
}) /* <-- end of function definition */ (); // <-- invoke that function immediately
它没有()()
,它有(function(){})()
。
函数语法function(){}
,函数调用运算符()
。包装函数的括号在技术上并不特殊,您可以用 !
替换它们:
!function(){}()
这样做是行不通的:
function(){}()
因为这在语句上下文中,function
启动函数声明而不是表达式。然后语法失败,因为函数声明必须具有名称。
如果我们有 !function(){}
(或 (function(){}
),那么它就不能是一个语句,因为!
(或(
)已经期望一个表达式,所以它将被视为一个表达式。
因此,您无需任何额外费用即可执行此操作:
var a = function() {
return false;
}();
由于var a =
已经期待表达式,因此function
不可能是函数声明的开头。
测试你的函数是否会被视为表达式或声明的一个简单方法是问问自己,我可以在这里使用var x
吗?
例如:
var x; //all is fine, so if I said function here, it would be a start of a function declaration
(var x) //Gives an error, so replacing var x with a function would be a function expression
var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression
等等
第一个结果在函数中,与(2)
结果2
相同。第二个叫它。
相关文章:
- Meteor Router数据函数被调用两次
- Append元素在运行两次函数后不显示
- 为什么我们要在语句中两次将函数括在括号中
- 调用一个函数两次
- java-script 函数被调用两次
- Ajax Post-Submit函数提交两次
- 在一个页面中包含两次的脚本中调用函数
- 我必须点击两次才能使用jQuery激活函数
- 为什么这个函数执行了两次
- isHidden函数要求我在应用响应显示时单击两次
- 调用随机函数Javascript,但不能两次调用相同的函数
- jQuery停止函数运行两次
- JS函数只需点击一次即可触发两次
- 在一个页面中使用相同的javascript函数两次
- matchMedia调用函数两次
- JS函数中的一个点击按钮被调用了两次
- jQuery移除两次函数调用
- 在JS中定义两次函数.根据网页指示要使用的定义
- 防止在两个触发事件中执行两次函数
- AngularJS需要执行两次函数才能显示结果