我最近将当前版本的json2.js与我在项目中的版本进行了比较,并注意到函数表达式的创建和自我执行方式有所不同.
用于在括号中包装匿名函数然后执行它的代码,
(function () {
// code here
})();
Run Code Online (Sandbox Code Playgroud)
但现在它将自动执行的函数包含在括号中.
(function () {
// code here
}());
Run Code Online (Sandbox Code Playgroud)
有通过CMS在接受答案的注释解释JavaScript的封装匿名函数的语法是"既:(function(){})();和(function(){}());有效."
我想知道有什么区别?前者是否通过绕过全局匿名函数来占用内存?括号应该放在哪里?
可能重复:
"(function(){})()"和"(function(){}())"在JavaScript中功能相同吗?
这是我还没有想到的东西,但是我一直在使用function(){}(),因为我添加了括号后我的VIM语法突出显示,虽然我已经看过(function(){}) ()很多次,也许它是一个IE的东西?
编辑:
var singleton = function() {
// code
}();
var singleton = (function() {
// code
})();
Run Code Online (Sandbox Code Playgroud) 这两个javascript函数调用有什么区别?
(function(){alert("foo")})()
Run Code Online (Sandbox Code Playgroud)
与此相对:
(function(){alert("foo")}())
Run Code Online (Sandbox Code Playgroud) 可能重复:
自动执行匿名JavaScript函数的括号位置?
有时我看到:
(function() { ... }());
Run Code Online (Sandbox Code Playgroud)
有时我看到:
(function() { ... })();
Run Code Online (Sandbox Code Playgroud)
这两种形式有区别吗?是否有任何令人信服的理由使用一种形式而不是另一种形式?
我经常看到两种惯例,我想知道是否存在实际差异.
(function () {
document.write("it works");
}());
(function () {
document.write("it also works");
})();
Run Code Online (Sandbox Code Playgroud) 可能重复:
"(function(){})()"和"(function(){}())"在JavaScript中功能相同吗?
我正在阅读下面的文件.
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#patternity
当我查看这些示例时,自动调用匿名函数有三种形式.
一个是
(function() {
//do something
})();
Run Code Online (Sandbox Code Playgroud)
而另一个是
function() {
//do something
}();
Run Code Online (Sandbox Code Playgroud)
而另一个是
(function() {
//do something
}());
Run Code Online (Sandbox Code Playgroud)
这三种形式有什么区别?
谢谢你的阅读!
在许多书籍/ 博客文章中,自调用匿名函数模式的方式如下:
(function() {
var foo = 'bar';
})();
Run Code Online (Sandbox Code Playgroud)
但是,在此上运行JSLint会出现此错误:
将调用移动到包含该函数的parens中.
例如将其改为此作品:
(function() {
var foo = 'bar';
}());
Run Code Online (Sandbox Code Playgroud)
问题
function(){}()抛出一个SyntaxError: Unexpected token ( function(){}()) - 工作正常
编辑:这是对此的一些后续(虽然我不会说完全重复):JSLint错误:"将调用移动到包含该函数的parens",所以我的主要问题是#3,为什么它完全有效?
我被告知,总是在JavaScript代码的开头插入分号是一个好习惯,如下所示:
;(function(){
})();
Run Code Online (Sandbox Code Playgroud)
但是,许多流行的JavaScript库/框架都不使用它,例如jQuery,Backbone等.
我相信开头的分号应该可以防止坏代码破坏缩小/压缩的代码等等.但是,为什么没有人再使用它了?
开头的分号是否由于某种原因变得无用?
在javascript中,新建对象的典型方法是这样做:new Date().但你也可以这样做:new (Date).采用后一种方式有什么区别和优势?
我通过JSLint运行了一个脚本,它选择了一个带括号放置的特定问题.
我写过:
(function(){})();
Run Code Online (Sandbox Code Playgroud)
有人建议使用:
(function(){}());
Run Code Online (Sandbox Code Playgroud)
我很好奇这个特定的变化修复了什么错误或问题.我认为,因为JSLint选择了它作为一个问题,所以必须有人的问题.
扩展形式:
(
function (p) {
...code...
}
)(param); //parameters after the parens
Run Code Online (Sandbox Code Playgroud)
航班吗
(
function (p) {
...code...
}(param) //parameters within the parens
);
Run Code Online (Sandbox Code Playgroud)