了解javascript中参数的基础知识

了解javascript中参数的基础知识,javascript,Javascript,嘿,伙计们,我对java脚本非常陌生,但已经阅读了一些关于js的入门书籍,我正在浏览MDN文档以了解如何在js中工作,并遇到了以下脚本: function list(type) { var result = "<" + type + "l><li>"; var args = Array.prototype.slice.call(arguments, 1); result += args.join("</li><

嘿,伙计们,我对java脚本非常陌生,但已经阅读了一些关于js的入门书籍,我正在浏览MDN文档以了解如何在js中工作,并遇到了以下脚本:

    function list(type) {
      var result = "<" + type + "l><li>";
      var args = Array.prototype.slice.call(arguments, 1);
      result += args.join("</li><li>");
      result += "</li></" + type + "l>"; // end list

      return result;
    }

    var listHTML = list("u", "One", "Two", "Three");

console.log(listHTML);  // "<ul><li>One</li><li>Two</li><li>Three</li></ul>"
现在在list函数中发生的是

  var result = "<" + type + "l><li>"; // here type is still --  "u", "One", "Two", "Three" , than why does only u get inserted ?? 
  var args = Array.prototype.slice.call(arguments, 1); // in understand this line 
  result += args.join("</li><li>");
  result += "</li></" + type + "l>"; // end list

  return result;
var result=“
  • ”;//这里的类型仍然是--“u”,“一”,“二”,“三”,为什么只有u被插入?? var args=Array.prototype.slice.call(参数,1);//我明白这句话 结果+=args.join(“
  • ”); 结果+=“
  • ”;//结束列表 返回结果;
    为了让这个程序像我所想的那样工作,关键是在第一行只插入“u”,而不是插入所有的参数(见我的评论),但是在这个代码段中是如何实现的,我知道这是一个简单的代码段,但我真的坐在这里,看着这段代码搔着头

    有人能解释一下吗

    编辑我的预期输出是:

    <uOneTwoThreel><li>One</li><li>Two</li><li>Three</li></uOneTwoThreel>
    
  • 一个
  • 两个
  • 三个
  • 谢谢


    Alex-z

    在Javascript中,伪数组<代码>参数包含已传递给函数的所有内容,而函数参数列表中列出的命名参数将被传递的值填充,忽略额外参数,如果传递的参数不够,则设置<代码>未定义的

    例如,使用
    f(1,2,3,4)
    调用
    函数f(x,y){…}
    将具有

    • x
      =1
    • y
      =2
    • 参数
      =
      [1,2,3,4]
    相反,用
    g(1)
    调用
    函数g(x,y){…}

    • x
      =1
    • y
      =
      未定义
    • 参数
      =
      [1]

    请注意,
    arguments
    不是数组,因此不能使用所有数组方法(如
    join
    )。这就是使用
    切片
    技巧转换跳过数组中第一个参数的所有参数的原因。

    这里的问题是
    类型
    是一个参数,它将为方法调用保留第一个参数的值,在您的例子中是
    u
    。由于您没有传递的参数那么多的参数,其余参数将没有正式引用

    function list() {
        //this will create an array params which will have all the values of the arguments object
        var params = Array.prototype.slice.call(arguments, 0);
    
        //we joins all the passes params to create the type
        var type = params.join('');
        var result = "<" + type + "l><li>";
    
        //we ignores the first parameter here
        var args = params.slice(1);
        result += args.join("</li><li>");
        result += "</li></" + type + "l>";
    
        return result;
    }
    
    var listHTML = list("u", "One", "Two", "Three");
    
    console.log(listHTML);
    
    函数列表(){
    //这将创建一个数组params,其中包含arguments对象的所有值
    var params=Array.prototype.slice.call(参数,0);
    //我们连接所有的passs参数来创建类型
    变量类型=参数连接(“”);
    var result=“
  • ”; //我们在这里忽略第一个参数 var args=参数切片(1); 结果+=args.join(“
  • ”); 结果+=“
  • ”; 返回结果; } var listHTML=列表(“u”、“一”、“二”、“三”); log(listHTML);

    演示:

    您的预期输出是什么?
    类型
    不是“u”、“1”、“2”、“3”-它只是“u”。如果您有
    函数fn(arg1,arg2){//body}
    ,并将其称为
    fn(“foo”,“bar”,“baz”)
    arg1
    将是
    “foo”
    arg2
    将是
    “baz”
    ,第三个参数将不会为其创建变量,但将以
    参数
    @ArunPJohny>为特征!
    function list() {
        //this will create an array params which will have all the values of the arguments object
        var params = Array.prototype.slice.call(arguments, 0);
    
        //we joins all the passes params to create the type
        var type = params.join('');
        var result = "<" + type + "l><li>";
    
        //we ignores the first parameter here
        var args = params.slice(1);
        result += args.join("</li><li>");
        result += "</li></" + type + "l>";
    
        return result;
    }
    
    var listHTML = list("u", "One", "Two", "Three");
    
    console.log(listHTML);