JavaScript窗口名称空间-我能了解一下它在做什么吗?

JavaScript窗口名称空间-我能了解一下它在做什么吗?,javascript,namespaces,coffeescript,javascript-namespaces,Javascript,Namespaces,Coffeescript,Javascript Namespaces,我有一些我正在努力理解的代码。我不是JavaScript方面的专家(我有一个基本的掌握),我一直在阅读DOM和名称空间(以及console.log()'ing变量),试图了解这是怎么做的(不幸的是没有用) 这段代码超出了我的理解范围,我希望有人能给我解释一下它的功能,让我“哑口无言” 这是咖啡脚本(我将把JavaScript放在最后): 我将尝试回答3个问题: 1.-切片 slice()是js中所有数组的内置方法。它用于复制一个数组,获得一个新数组,而不是对原始数组的引用(在js中,默认情况下通

我有一些我正在努力理解的代码。我不是JavaScript方面的专家(我有一个基本的掌握),我一直在阅读DOM和名称空间(以及
console.log()
'ing变量),试图了解这是怎么做的(不幸的是没有用)

这段代码超出了我的理解范围,我希望有人能给我解释一下它的功能,让我“哑口无言”

这是咖啡脚本(我将把JavaScript放在最后):


我将尝试回答3个问题:

1.-切片

slice()是js中所有数组的内置方法。它用于复制一个数组,获得一个新数组,而不是对原始数组的引用(在js中,默认情况下通过引用复制数组)

窗口。uu slice=[].slice
正在窗口中创建一个名为
uu slice
的新方法,其值是本机js方法
slice
的副本

稍后在这里使用:
\u slice.call(arguments)

看看

2.-功能

namespace=(目标、名称、块)->

没错,这是coffeescript语法,它将生成一个常规函数及其参数

3.-函数和参数

引用:“如果名称空间定义了3个参数,我不明白为什么这样做有效……”

所有常规函数(不是箭头函数)都有一个名为
参数的内置对象

这里使用的是:

if (arguments.length < 3) {...}
if(arguments.length<3){…}
通过这种方式,您可以检查函数的参数数量

检查

最后,在我看来,如果你不是很熟悉javascript,你应该尝试学习vanilla js的语法,而不是coffeescript。此外,咖啡脚本每天使用较少

(function() {
  var __slice = [].slice;

  (function(window) {
    'use strict';
    var namespace;
    window.__slice = [].slice;
    namespace = function(target, name, block) {
      var item, top, _i, _len, _ref, _ref1;
      if (arguments.length < 3) {
        _ref = [window].concat(__slice.call(arguments)), target = _ref[0], name = _ref[1], block = _ref[2];
      }
      top = target;
      _ref1 = name.split('.');
      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
        item = _ref1[_i];
        target = target[item] || (target[item] = {});
      }
      return block(target, top);
    };
    return namespace('my_app', function(exports, top) {
      return exports.namespace = namespace;
    });
  })(window);

}).call(this);
if (arguments.length < 3) {...}