相关疑难解决方法(0)

为什么使用自执行功能?

在很多地方我看到这样的脚本:

(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)

javascript function

27
推荐指数
3
解决办法
1万
查看次数

Node.js JavaScript语法

我在Node.js应用程序中看到了一段JavaScript代码.

( function() { console.log("gg") } )(this)
Run Code Online (Sandbox Code Playgroud)

我想知道为什么使用=>(function(){})(this)这种类型的结构,以及如何编译.

我理解为什么我们有这两个方括号()(),以及为什么这个代码可以工作.

javascript syntax node.js

22
推荐指数
1
解决办法
2509
查看次数

JavaScript:{} == false是一个SyntaxError?

在Firefox 3.5中,我在Firebug控制台中输入:

false=={} // => evals to false
{}==false // syntax error
Run Code Online (Sandbox Code Playgroud)

对此有何解释?

javascript equality syntax-error

16
推荐指数
2
解决办法
905
查看次数

异步.js文件加载语法

我注意到,异步加载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 asynchronous

16
推荐指数
1
解决办法
8523
查看次数

花括号后的括号是什么意思?

我看到Javascript代码在函数关闭大括号后立即使用括号,我无法理解它们用于什么.

例:

function foo(bar){
  return bar;
}(0);
Run Code Online (Sandbox Code Playgroud)
  • 怎么(0)办?

  • 这个叫什么?

  • 你应该什么时候使用这种技术?

javascript

11
推荐指数
2
解决办法
1754
查看次数

自动执行功能

可能重复:
(function(){})()之间的差异; 和function(){}();

我试图更好地理解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

10
推荐指数
1
解决办法
3574
查看次数

功能上的额外括号

可能重复:
围绕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)

谢谢!

javascript closures

10
推荐指数
2
解决办法
1585
查看次数

怪异的Javascript表达

我试着理解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代码确实可以正常工作.)

javascript syntax function

9
推荐指数
1
解决办法
551
查看次数

我什么时候应该使用语法"(function(){...})();"?

我的查询用于"(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)

javascript

8
推荐指数
2
解决办法
455
查看次数

这些双括号在JS中做了什么?

我正在读这本书secrets of the js ninja,而且我经常看到这样的代码

(function(){
  something here;
  })();
Run Code Online (Sandbox Code Playgroud)

为什么我们需要将函数括在括号中?为什么我们之后再添加一对括号?

javascript

6
推荐指数
2
解决办法
5693
查看次数