【问题标题】:Strange javascript code奇怪的javascript代码
【发布时间】:2015-03-24 01:50:23
【问题描述】:

我找到了这段代码sn-p:

;       
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; 分配

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

【问题讨论】:

    标签: javascript idioms


    【解决方案1】:

    第二行的“100%”

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

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

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

    var true = true;和 var false = false; 3-4行作业

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

    【讨论】:

      【解决方案2】:

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

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

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

      第 5 行也有同样的内容:它看起来(并且实际上充当)“默认参数”分配,但以奇怪的方式完成(传统上更明显的是它用作 location = location || {};)。我相信以这种方式编写它的唯一原因可能是混淆、笑话或误解。

      100% 也是如此。您可以使用任何运算符来指示函数表达式。最常见的方法是使用括号。但通常你也可以遇到:

      !function(){
      
      }();
      

      或:

      +function(){
      
      }();
      

      但你也可以写

      42 * function(){
      
      }();
      

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

      【讨论】:

        猜你喜欢
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        相关资源
        最近更新 更多