在这段代码中:为什么在定义e的括号中定义e?

时间:2013-12-06 00:37:32

标签: javascript

我试图从quojs了解这个缩小的代码。在代码中,e(缩小变量:不是我做!)在第3行定义。然后,在定义函数e的函数范围内,再次定义e。到底是怎么回事?是否在第3行定义,然后e.e在第6行定义?我试图感受javascript object model:但是在他们自己的定义范围内定义的东西肯定会让我失望!

(function() {
  var e;
  e = function() {
    var e, t, n;
    t = [];
    e = function(t, r) {
      var i;
      if (!t) {
        return n()
      } else if (e.toType(t) === "function") {
        return e(document).ready(t)
      } else {
        i = e.getDOMObject(t, r);
        return n(i, t)
      }
    };
    n = function(e, r) {
      e = e || t;
      e.__proto__ = n.prototype;
      e.selector = r || "";
      return e
    };
    e.extend = function(e) {
      Array.prototype.slice.call(arguments, 1).forEach(function(t) {
        var n, r;
        r = [];
        for (n in t) {
          r.push(e[n] = t[n])
        }
        return r
      });
      return e
    };
    n.prototype = e.fn = {};
    return e
  }();
  window.Quo = e;
  "$$" in window || (window.$$ = e)
}).call(this);

3 个答案:

答案 0 :(得分:2)

  

是否在第3行定义,然后e.e在第6行定义?

不,第4行的var e声明它是函数的本地。所以这两个e之间没有冲突。

答案 1 :(得分:1)

您有不同的范围,每个范围都有不同的e

简化您的代码,

var e = 'abc';
e; // 'abc'
function foo() {
    var e = 123;
    e; // 123
}
e; // 'abc'

答案 2 :(得分:0)

var e = function() {
  var e = 1;
  console.log(e); // prints a *number*
};
e();
console.log(e); // prints a *function*

由于功能范围,这些是不同的变量。