gpt4 book ai didi

javascript - 了解javascript中参数的基础知识

转载 作者:行者123 更新时间:2023-12-03 07:19:31 25 4
gpt4 key购买 nike

嘿伙计们,我是 java 脚本的新手,但已经阅读了一些关于 js 的初学者书籍,并且我正在阅读 MDN 文档以了解如何 arguments在 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("u", "One", "Two", "Three");

现在列表函数中发生的是

  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;

为了让这个程序像我想的那样工作,在第一行只插入“u”而不是所有参数(见我的评论)是至关重要的,但我知道在这个片段中这是如何完成的这是一段简单的代码,但我真的坐在这里,看着这段代码抓耳挠腮。

谁能解释一下?

EDIT 我的预期输出是:

<uOneTwoThreel><li>One</li><li>Two</li><li>Three</li></uOneTwoThreel>

谢谢。

亚历克斯-z

最佳答案

在 Javascript 中,伪数组 arguments 包含传递给函数的所有内容,而函数参数列表中列出的命名参数会填充传递的值如果没有传递足够的参数,则忽略额外的参数并设置 undefined

例如用f(1,2,3,4)调用function f(x, y){...}会有

  • x = 1
  • y = 2
  • 参数 = [1, 2, 3, 4]

g(1) 调用 function g(x, y){...} 将会有

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

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

关于javascript - 了解javascript中参数的基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29820711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com