【问题标题】:JavaScript: Closures helpJavaScript:闭包帮助
【发布时间】:2010-02-02 05:56:09
【问题描述】:

我有一个包含以下代码的空 .js 文件:

Cart.CheckoutNow = {
 ...
}

// Alias

if (typeof(CheckoutNow) === 'undefined') {
    CheckoutNow = Cart.CheckoutNow;
}
else {
    alert('CheckoutNow is already a variable in window.');
}

如何让// Alias 代码出现在页面顶部,但在声明 Cart.CheckoutNow 后让它执行?

这可行,但我不喜欢你必须在底部调用 alert():

alias = function() {
 if (typeof(CheckoutNow) === 'undefined') {
  CheckoutNow = Cart.CheckoutNow;
 }
 else {
  alert('CheckoutNow is already a variable in window.');
 }
};

Cart.CheckoutNow = {
 ...
};

alias();

【问题讨论】:

  • 顺便说一句,你想要if( typeof CheckoutNow === 'undefined' ) 没有CheckoutNow 周围的大括号。
  • 顺便说一句,不需要严格比较,typeof总是返回一个字符串
  • 这个问题实际上似乎与 javascript 闭包没有任何关系。

标签: javascript closures


【解决方案1】:

如果不解释您为什么要这样做,我猜这是为了更好地组织代码。如果是这种情况,我会将您的 JavaScript 拆分为多个文件,并按以下顺序包含在您的页面中:

// namespace.js
if (typeof Cart === 'undefined') {
    Cart = {};
}

// checkoutnow.js
Cart.CheckoutNow = {
    // module code here
}

// alias.js
alias = function() {
    // alias code here
}

// domready.js
onDocumentReadyFunction() {
    alias();
}

【讨论】:

    【解决方案2】:

    我不确定这是否真的是你想要做的,但如果你确定,那么你想要的是:

    window.setTimeout(function(){
    
      // Alias
      if (typeof CheckoutNow === 'undefined') {
        CheckoutNow = Cart.CheckoutNow;
      }
      else {
        alert('CheckoutNow is already a variable in window.');
      }
    
    },0);
    
    Cart.CheckoutNow = {
      ...
    }
    

    【讨论】:

      【解决方案3】:

      您必须在函数中定义别名并将其称为主体的 onload 事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        • 2013-09-22
        相关资源
        最近更新 更多