我找到了这个代码片段:
;
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 )
我不明白这些部分在做什么:
var _true_ = true;和var _false_ = false;分配我很好奇这些东西的目的是什么。
发布于 2015-01-25 13:13:55
第二行的"100%“
它是100数,后面跟着一个模算子。它不用于任何事情(因为没有捕获结果),只是强制将右侧作为函数表达式来处理,而不是函数声明。
这是我从未见过的一种非常不寻常和不直观的方法。
更常见的做法是将函数表达式包装为parens或在其前面加上not运算符。
变量true = true;var false = false;赋值在3-4行中。
作者似乎试图通过将true和false复制到名称中包含非alpha数字字符的变量中,而不是始终使用文字来提请注意它们的使用。再说一次,这是非常奇怪的,这不是我以前见过的。
发布于 2015-01-25 13:37:29
看起来,它是一组错误使用的“最佳实践”,它不会导致异常,但绝对是奇怪和模糊的。看第二行也是最后一行。最佳做法正好相反,反之亦然:
(function ($, undefined){
// do the stuff
})(jQuery);这里的未定义将是真正的未定义的,因为当函数调用时没有第二个参数。但是到底是什么原因把“未定义的”参数传递给函数而不使用它呢?看起来像个恶作剧。
同样的事情发生在5行上:它看起来(实际上是)作为“默认参数”赋值,但却以奇怪的方式完成(传统上,更明显的是它用作location = location || {};)。我相信,只有这样写它的理由才可能是混淆、玩笑或误解。
100%也是如此。您可以使用任何运算符来指示函数表达式。最常见的方法是使用括号。但你也经常会遇到:
!function(){
}();或者:
+function(){
}();但你也可以写
42 * function(){
}();这一切都是一样的,只有括号是最明显和常见的。
https://stackoverflow.com/questions/28136748
复制相似问题