在很多地方我看到这样的脚本:
(function () {
var hello = 'Hello World';
alert(hello);
})();
Run Code Online (Sandbox Code Playgroud)
为什么不这样写,没有任何功能:
var hello = 'Hello World';
alert(hello);
Run Code Online (Sandbox Code Playgroud) 我在Node.js应用程序中看到了一段JavaScript代码.
( function() { console.log("gg") } )(this)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么使用=>(function(){})(this)这种类型的结构,以及如何编译.
我理解为什么我们有这两个方括号()(),以及为什么这个代码可以工作.
在Firefox 3.5中,我在Firebug控制台中输入:
false=={} // => evals to false
{}==false // syntax error
Run Code Online (Sandbox Code Playgroud)
对此有何解释?
我注意到,异步加载js文件似乎有一些稍微不同的语法,我想知道两者之间是否存在任何差异,或者它们两者的功能是否相同.我猜它们的工作方式相同,但只是想确保一种方法由于某种原因并不比另一种更好.:)
方法一
(function() {
var d=document,
h=d.getElementsByTagName('head')[0],
s=d.createElement('script');
s.type='text/javascript';
s.src='/js/myfile.js';
h.appendChild(s);
})(); /* note ending parenthesis and curly brace */
Run Code Online (Sandbox Code Playgroud)
方法二(在Facebook的代码中看到这个)
(function() {
var d=document,
h=d.getElementsByTagName('head')[0],
s=d.createElement('script');
s.type='text/javascript';
s.async=true;
s.src='/js/myfile.js';
h.appendChild(s);
}()); /* note ending parenthesis and curly brace */
Run Code Online (Sandbox Code Playgroud) 我看到Javascript代码在函数关闭大括号后立即使用括号,我无法理解它们用于什么.
例:
function foo(bar){
return bar;
}(0);
Run Code Online (Sandbox Code Playgroud)
怎么(0)办?
这个叫什么?
你应该什么时候使用这种技术?
我试图更好地理解JavaScript的一些功能.在The Definitive JavaScript其中说自动执行的函数应该有括号围绕它们:
var obj = (function() {
var value = 0;
return {
increment: function(inc) {
value += typeof inc === "number" ? inc : 1;
},
getValue: function() {
return value;
}
}
})();
Run Code Online (Sandbox Code Playgroud)
但是在JavaScript - The Good Parts这个例子取自的地方,它具有上述自执行功能而没有括号圆,如下所示:
var obj = function() {
var value = 0;
return {
increment: function(inc) {
value += typeof inc === "number" ? inc : 1;
},
getValue: function() {
return value;
}
} …Run Code Online (Sandbox Code Playgroud) 可能重复:
围绕JavaScript对象/函数/类声明的括号是什么意思?
这个"(function(){});",括号内的函数在javascript中是什么意思?
一个Javascript函数
我遇到类似这样的标记:
var something = (function(){
//do stuff
return stuff;
})()
document.ondblclick = function(e) { alert(something(e)) };
Run Code Online (Sandbox Code Playgroud)
我不明白的开(闭)()的something变量.你能解释一下写这样的差异吗?
var something = function(){
//do stuff
return stuff;
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
我试着理解Protovis是如何工作的,我偶然发现了这样的代码:
force.node.add(pv.Dot)
.size(function(d) (d.linkDegree + 4) * Math.pow(this.scale, -1.5)) // notice this
.fillStyle(function(d) d.fix ? "brown" : colors(d.group)) // and this
.strokeStyle(function() this.fillStyle().darker()) // and even this
.lineWidth(1)
.title(function(d) d.nodeName)
.event("mousedown", pv.Behavior.drag())
.event("drag", force);
Run Code Online (Sandbox Code Playgroud)
我尝试滚动自己的短函数,如下所示:
(function(a) a+2)
Run Code Online (Sandbox Code Playgroud)
我不是要求声明的匿名函数function(){stuff();}.有问题的代码看起来像是function() stuff;有效的.我想知道为什么.我不想学习类似的结构myvar = function(a){return a+1;},而是学习类似的结构myvar = (function(a) a+1).请仔细查看上面的代码.
但是,正如我所怀疑的那样,它引发了语法错误.
这样的代码怎么工作?
(注意:protovis代码确实可以正常工作.)
我的查询用于"(function(){...})();" 鉴于我不是插件.例如" http://piecesofrakesh.blogspot.com/2009/03/downloading-javascript-files-in.html "
(function() {
var s = [
"/javascripts/script1.js",
"/javascripts/script2.js"
];
var sc = "script", tp = "text/javascript", sa = "setAttribute", doc = document, ua = window.navigator.userAgent;
for(var i=0, l=s.length; i<l; ++i) {
if(ua.indexOf("MSIE")!==-1 || ua.indexOf("WebKit")!==-1) {
doc.writeln("<" + sc + " type=\"" + tp + "\" src=\"" + s[i] +
"\" defer></" + sc + ">");
} else {
var t=doc.createElement(sc);
t[sa]("src", s[i]);
t[sa]("type", tp);
doc.getElementsByTagName("head")[0].appendChild(t);
}
}
})();
Run Code Online (Sandbox Code Playgroud)
要么
var s = [
"/javascripts/script1.js",
"/javascripts/script2.js"
]; …Run Code Online (Sandbox Code Playgroud) 我正在读这本书secrets of the js ninja,而且我经常看到这样的代码
(function(){
something here;
})();
Run Code Online (Sandbox Code Playgroud)
为什么我们需要将函数括在括号中?为什么我们之后再添加一对括号?
javascript ×10
function ×2
syntax ×2
asynchronous ×1
closures ×1
equality ×1
node.js ×1
syntax-error ×1