Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么谷歌主页使用(0,obj.func)(args)语法?_Javascript - Fatal编程技术网

Javascript 为什么谷歌主页使用(0,obj.func)(args)语法?

Javascript 为什么谷歌主页使用(0,obj.func)(args)语法?,javascript,Javascript,有时我盯着google.com主页提供的js,发现它们倾向于使用(0,obj.func)(args)语法。以下是脚本的摘录: var _ = _ || {}; (function (_) { var window = this; try { _.mb = function (a) { return (0, window.decodeURIComponent)(a.replace(/\+/g, " ")) };

有时我盯着google.com主页提供的js,发现它们倾向于使用
(0,obj.func)(args)
语法。以下是脚本的摘录:

 var _ = _ || {};
 (function (_) {
     var window = this;
     try {
         _.mb = function (a) {
             return (0, window.decodeURIComponent)(a.replace(/\+/g, " "))
         };
         _.zg = function (a, b) {
             for (var c = a.length ? a.split("&") : [], d = 0; d < c.length; d++) {
                 var e = c[d];
                 if ((0, _.Ag)(e) == b) return (c = /=(.*)$/.exec(e)) ? (0, _.mb)(c[1]) : null
             }
             return null
         };
         _.Ag = function (a) {
             return (a = /^(.+?)(?:=|$)/.exec(a)) ? (0, _.mb)(a[1]) : null
         };
         var Cg = function (a, b) {
                 var c = a.indexOf("?");
                 return 0 > c ? null : (0, _.zg)(a.substring(c + 1), b)
             };
         // Note var Cg called with no 0
         var oca = function (a) {
                 this.A = Cg(a, "mods");
                 this.B = Cg(a, "ver")
             };
     } catch (e) {}
 })(_);  
var=124; |{};
(功能){
var窗口=此;
试一试{
_.mb=函数(a){
返回(0,window.decodeURIComponent)(a.replace(/\+/g,“”))
};
_.zg=函数(a,b){
对于(var c=a.length?a.split(&)):[],d=0;dc?空:(0,uzg)(a.子字符串(c+1),b)
};
//注意:var Cg调用时没有0
var oca=功能(a){
这个.A=Cg(A,“mods”);
此.B=Cg(a,“版本”)
};
}捕获(e){}
})(_);  
为什么要在0前面加前缀?

这会导致错误

这确保了被调用函数中的上下文是全局上下文。这在内部范围内可能很有用

例如:

var a = {
  b: function(){
     console.log(this);    
  },
  c1: function(){
     this.b(); 
  },
  c2: function(){
     (0, this.b)(); 
  },
  c3: function(){
     (this.b)(); 
  }
}
a.c1(); // logs a
a.c2(); // logs window
a.c3(); // logs a

@Juhana可能重复,但这一次有一个实际的答案,而不仅仅是逗号运算符的解释;)这是真的。我有点希望dystroy能回答这个问题。多亏了dystroy,我宁愿将这个问题标记为这个问题的副本…实际上,所有其他问题都应该标记为这个问题的副本,因为这个问题有正确的答案。看起来这个答案不同于那个副本。。。但是,描述这种行为的文档究竟在哪里?请记住,这段代码可能是从另一个源代码生成的,所以我猜这是优化器/小型化器/任何东西的结果,可能不是由程序员以这种方式编写的。@MackieeE是的。对不起,我现在没有时间发表更多评论,我正在开会…@mackiee加密之前可能是一样的。就我个人而言,当值无关紧要时,我也会使用
0
,如
Array.apply(0,Array(10)).map(Math.random)
@Anony mouse有些人看重可靠性,有些人看重表达的简单性,但更多的人同时看重这两者。javascript不如java可靠这一事实并不妨碍它更具表现力。它们在正交轴上。然而,作为一种更具表现力的语言,它确实允许以一种不那么丑陋和混乱的方式使用。