繁体   English   中英

奇怪的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. var _true_ = true; var _false_ = false; 分配3-4行

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

第二行中的“100%”

它是数字100后跟模数运算符。 除了强制右侧被视为函数表达式而不是函数声明之外,它不用于任何东西(因为结果未被捕获)。

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

通常将函数表达式包装在parens中或在其前面加上not运算符。

var true = true; 和var false = false; 分配3-4行

作者似乎试图通过将它们复制到名称中包含非字母数字字符而不是整个字面值的变量来引起对truefalse的使用的注意。 再次,这是非常奇怪的,而不是我以前见过的东西。

它看起来像是一个错误使用的“最佳实践”的集合,它不会导致异常,但绝对奇怪和模糊。 看看第二行和最后一行。 使用最佳实践反之亦然:

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

undefined here将是真正的undefined,因为当函数调用时没有第二个参数。 但是地球上的什么原因可能是将“未定义”参数传递给函数并且不使用它的原因? 这看起来像个恶作剧。

同样的事情在5行:它看起来(实际上是行为)作为“默认参数”分配但以奇怪的方式完成(传统上更明显地用作location = location || {}; )。 我相信只有这样做才能写出来的理由可能是混淆,开玩笑或误解。

同样的事情是100% 您可以使用任何运算符来指示函数表达式。 最常见的方法是使用括号。 但通常你也可以见面:

!function(){

}();

要么:

+function(){

}();

但你也可以写

42 * function(){

}();

这一切都以同样的方式行事,只有括号最明显和最常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM