2017-02-17 3 views
2

Так что я создал функцию в .js файле, который я связан с HTML страницы, это моя функция:Почему я получаю undefined?

function produitListe1(x){ 
    var x = new String("25678"); 
    var a = x.split(", "); 
    var sResultat; 

    for(var i=0; i < x.length;i++){ 
     sResultat = sResultat + ("<ul>" + "<li>" + x[i] + "</li>" + "</ul>"); 
    } 
    return sResultat; 
} 

, а затем, чтобы показать результат выполнения функции на моей странице я создаю еще одну функцию, которая идет как это

(function(){ 
    var aLesDiv = document.querySelectorAll("#global div"); 
    aLesDiv[0].innerHTML = produitListe1(2,5,6,7,8); 
})(); 

Когда я загрузить страницу, я получаю мою строку на дифферент li's..but я получаю случайное неопределенную вызова в верхней части, то почему?

+1

' "25678" .split ('') 'дает тот же результат, как' "25678" .split() ' –

+0

Попробуйте сделать' х = не определено + "foo"; 'и посмотреть, что такое значение' x'. – Barmar

ответ

2
  1. Какой смысл аргумента x если вы rediclaring его внутри функции.
  2. Способ, которым вы вызываете функцию, я думаю, что вы пытаетесь использовать объект функции arguments.

Попробуйте это:

function produitListe1(){ 
    var sResultat = ""; // this should be initialized 
    for(var i = 0; i < arguments.length; i++) { 
     sResultat += "<ul><li>" + arguments[i] + "</li></ul>"; // += is better 
    } 
    return sResultat; 
} 

arguments локальная переменная определена внутри каждой функции, это массив-подобный объект, который содержит все параметры, передаваемые в функцию, когда она была вызвана.

function foo() { 
 
    for(var i = 0; i < arguments.length; i++) 
 
    console.log("Parameter #" + (i+1) + ": " + arguments[i]); 
 
} 
 

 

 
foo(1, "R2D2", 13.56, true);

+0

Объект arguments на самом деле удобнее! Спасибо! –

1

Поскольку первый раз ваш цикл выполняется, sResultat еще не было присвоено значение (и, следовательно, не определено), и вы назначаете его к себе (не определен) + ("<ul>" + "<li>" + x[i] + "</li>" + "</ul>")

Попробуйте инициализацией sResultat как пустой строка (var sResultat = "";) вместо того, чтобы просто var sResultat;

0

Вы должны инициализировать sResultat с пустой строкой.

var sResultat = ''; 

function produitListe1() { 
 
    var sResultat = ''; 
 

 
    for (var i = 0; i < arguments.length; i++) { 
 
     sResultat = sResultat + ("<ul>" + "<li>" + arguments[i] + "</li>" + "</ul>"); 
 
    } 
 
    return sResultat; 
 
} 
 

 
(function() { 
 
    document.getElementById("out").innerHTML = produitListe1(2, 5, 6, 7, 8); 
 
})();
<div id="out"></div>

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