【问题标题】:Why is this function returning "undefined" instead of the array?为什么这个函数返回“未定义”而不是数组?
【发布时间】:2010-11-17 02:10:15
【问题描述】:

这项工作:

var stepFunc = 
[
    //Step 0 (it doe not exist)
    function(){console.log("Step 0");},
    //Step 1
    (function(){
        var fFirstTime = true;
        return function(){
            console.log("Step 1");
            if (fFirstTime){
                //Do Something
            }
        }   
    })(),
    // ... Other steps
];

这不起作用:

var stepFunc =
[ // Step 0 
    [
        function(){console.log("Step 0");},
        function(){console.log("Check Step 0");} 
    ], //Step 1         
    (function(){
        var fFirstTime = true;          
        return
        [
            function() { //Initialization function
                console.log("Step 1");
                if (fFirstTime){
                    //Do somrthing
                }
            }, function() { 
                return true;
            }
        ];      
    })(), 
    // ...
];

我希望 stepFunc 是一个函数数组的数组。在第一层,我想创建一个拥有自己数据的闭包。为什么 stepFunc[1] “未定义”?

【问题讨论】:

  • 尽我所能清理这个,修复缩进,对齐括号;即使在示例代码 sn-ps 中,您也应该尝试平衡括号,否则人们会认为这就是导致您的问题的原因。
  • @Šime Vidas - 我认为您在编辑时无意中删除了问题的原因。确保保持问题中代码的完整性(或缺乏完整性)。 :o) 回滚到@meagar 的编辑。
  • @patrick 哈哈,我只是尝试更好地格式化代码以便能够阅读代码,以便尝试解决问题,从而解决了这个问题。啊,JavaScript。 :)
  • 我测试过了。我复制并粘贴到jconsole.com 并使用开发者工具。 stepFunc[1] 是“未定义的”。有什么问题?
  • @Chris Check out jslint.com 将您的代码放入其中,它会报告您可能想要修复的错误,以使您的代码更健壮。

标签: javascript arrays multidimensional-array


【解决方案1】:

您可能会因为隐式语句终止,也就是隐式分号插入而绊倒。 return 之后的行被完全忽略,不返回任何内容。这有效:

var stepFunc = [
            // Step 0 
            [
                function(){console.log("Step 0");},
                function(){console.log("Check Step 0");} 
            ], //Step 1      
           (function(){
               var fFirstTime = true;          
               return [  // <-- important to begin the return value here
                  function() {
                    console.log("Step 1");
                    if (fFirstTime){
                        //Do somrthing
                    }
                  }, function()   { 
                    return true;
                  }
               ];         
           })()
];

【讨论】:

  • @deceze 我是时候看到有人发生这种情况了:p 不仅仅是理论上。
  • 我不希望在 return 执行后什么都没有。它实际上是唯一的最后一条语句
  • @Chris - 但是您确实想返回包含函数的数组,对吧?否则,自调用函数的目的是什么?
  • 我希望以后能在代码中调用 stepFunc[1][0]();
  • @Chris,return 之后的换行符导致错误。当return 语句后有一个换行符时,javascript 解释器认为它是语句的结尾,并插入一个;。请注意,@deceze 删除了外部数组的一部分,因此您需要将其重新添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多