了解javascript中参数的基础知识
嘿,伙计们,我对java脚本非常陌生,但已经阅读了一些关于js的入门书籍,我正在浏览MDN文档以了解如何在js中工作,并遇到了以下脚本:了解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><
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){…}
将具有
=1x
=2y
=参数
[1,2,3,4]
g(1)
调用函数g(x,y){…}
将
=1x
=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);