为什么我得到一个未定义的?

时间:2017-02-17 22:46:37

标签: javascript undefined

所以我在一个链接到html页面的.js文件中创建了一个函数,这是我的函数:

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);
}) ();

当我加载页面时,我会在不同的地方收到我的字符串。但是我在顶部收到一个随机的未定义调用,为什么?

3 个答案:

答案 0 :(得分:2)

  1. 如果你在函数内部重新定义它,那么参数x的重点是什么。
  2. 你调用函数的方式,我认为你要做的是使用函数的arguments对象。
  3. 试试这个:

    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);

答案 1 :(得分:1)

因为第一次执行for循环时,sResultat尚未分配值(因此未定义),并且您将其分配给自身(未定义)+ ("<ul>" + "<li>" + x[i] + "</li>" + "</ul>")

尝试将sResultat初始化为空字符串(var sResultat = "";),而不仅仅是var sResultat;

答案 2 :(得分: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>