2010-11-17 7 views
2

Эта работа:Почему эта функция возвращает «undefined» вместо массива?

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] "undefined"?

+1

Сделал все возможное, чтобы очистить это, исправить отступы и выровнять скобки; вы должны попытаться сбалансировать свои скобки даже в фрагментах кода образца, иначе люди предполагают, что это то, что вызывает вашу проблему. – meagar

+1

@ Šime Vidas - Я думаю, вы случайно удалили причину проблемы в своем редактировании. Не забудьте сохранить целостность (или недостаток) кода в вопросе. : o) Возвращение к редактированию @ meagar. – user113716

+0

@patrick Ха-ха, я удалил проблему, просто пытаясь форматировать код лучше, чтобы читать код, чтобы я мог попытаться решить проблему. Ах, JavaScript. :) –

ответ

6

Возможно, вы сталкиваетесь с неявным завершением утверждения, неявной точкой с запятой a.k.a. Строка после 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; 
        } 
       ];   
      })() 
]; 
+2

Одна из самых злых частей javascript в соответствии с мистером Дугласом Крокфордом ... –

+0

@deceze Я был о времени, что я вижу, что это случается с кем-то: p Не только в теории. –

+0

Я хочу, чтобы ничего не было сделано после возвращения. Это на самом деле единственное последнее утверждение –

Смежные вопросы