奇怪的 javascript 代码

Strange javascript code

我找到了这段代码:

;       
100% function($) {                                        // WTF?
    var _true_ = true;                                    // WTF?
    var _false_ = false;                                  // WTF?
    var go = function(location, date) {
        location || (location = {});  
        var result = _false_;
        if (date && date.day) {       
            result = geoService.go(location, date);
        }
        return !!result;              
    }
    var process = function(func) {
        var args = [].prototype.slice.call(arguments, 1); 
        return function() {                               
            return func.apply(this, args);
        }
    }
    // ...
}(jQuery, undefined);                                     

在这里:http://www.dofactory.com/products/javascript-jquery-design-pattern-framework (抱歉,页面上没有找到id-s)

我不明白这些部分在做什么:

  1. 第二行的“100%”
  2. 第 3-4 行中的 var _true_ = true;var _false_ = false; 作业

我很好奇,这些的目的是什么

the "100%" in the second line

它是数字 100 后跟一个取模运算符。除了强制将右侧视为函数表达式而不是函数声明外,它不用于任何其他用途(因为未捕获结果)。

这是一种非常不常见且不直观的方法,我以前从未见过。

更常见的做法是将函数表达式包裹在括号中或在其前面加上非运算符。

the var true = true; and var false = false; assignments in the 3-4 lines

作者似乎试图通过将 truefalse 复制到名称中包含非字母数字字符的变量而不是始终使用文字来引起人们对它们的注意。同样,这很奇怪,我以前从未见过。

看起来它是错误使用的集合 "best practices" 并没有导致异常,但绝对是奇怪和模糊的。查看第二行和最后一行。反之亦然使用了最佳实践:

(function ($, undefined){
    // do the stuff 
})(jQuery);

这里的undefined才是真正的undefined,因为调用函数时没有第二个参数。但是到底是什么原因将 "undefined" 参数传递给函数而不使用它呢?这看起来像个恶作剧。

同样的事情在第 5 行:它看起来(实际上是)作为 "default argument" 赋值但是以奇怪的方式完成(传统上更明显它用作 location = location || {};)。我相信以这种方式编写它的唯一理由可能是混淆、玩笑或误解。

100%也是一样。您可以使用任何运算符来指示函数表达式。最常见的方法是使用括号。不过经常也可以遇到:

!function(){

}();

或:

+function(){

}();

不过你也可以写成

42 * function(){

}();

它们的作用都是一样的,只有括号是最明显和最常见的。