首页 > web前端 > js教程 > 参数:JavaScript奇数

参数:JavaScript奇数

Joseph Gordon-Levitt
发布: 2025-03-08 00:23:12
原创
613 人浏览过

arguments: A JavaScript Oddity

参数:JavaScript奇数

钥匙要点

  • 参数是每个JavaScript函数中可用的本地,类似数组的对象,其中包含调用函数时提供给该函数的所有参数。这不是一个真正的数组,因为它不具备诸如Push and Pop之类的标准数组方法。 尽管有局限性,但“参数”是一个强大的工具,允许创建接受可变数量参数的灵活函数,可以使用数组方法将其转换为真实数组,Slice。
  • >参数还具有“ callee”属性,其中包含对创建“参数”对象的函数的引用,从而使匿名函数能够引用自身。这可以用来用预设参数创建自我引用函数和函数。
  • 参数是每个函数中可用的本地,类似数组的对象的名称。这很古怪,经常被忽略,但是编程巫师的来源。所有主要的JavaScript库都会利用参数对象的功能。这是每个JavaScript程序员都应该熟悉的东西。
  • > 在任何函数中,您都可以通过变量:参数访问它,并且包含调用函数时提供给该函数的所有参数的数组。它实际上不是JavaScript数组; TypeOf参数将返回值:“对象”。您可以通过数组索引访问单个参数值,并且它具有与其他数组一样的长度属性,但是它没有Push and Pop之类的标准数组方法。
  • 创建灵活函数

即使看起来有限,也是一个非常有用的对象。例如,您可以制作接受可变数量参数的功能。格式函数,在迪恩·爱德华兹(Dean Edwards)的base2库中找到,演示了此灵活性:>

>您提供一个模板字符串,其中您使用%1至%9添加了值的值,然后提供多达9个代表要插入字符串的其他参数。例如:

上面的代码将返回字符串“和论文想知道您穿的衬衫”。 您可能注意到的一件事是,在格式的函数定义中,我们仅指定一个参数:字符串。 JavaScript允许我们将任意数量的参数传递给一个函数,无论函数定义如何,并且参数对象都可以访问所有参数。

>将其转换为真实数组

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
登录后复制
登录后复制
登录后复制
即使参数不是实际的JavaScript数组,我们也可以使用标准数组方法(如下)轻松地将其转换为一个数组:

使用预设参数创建函数

参数对象允许我们执行各种JavaScript技巧。这是MakeFunc函数的定义。此功能使您可以为该功能提供功能参考和任何数量的参数。它将返回一个匿名函数,该函数调用您指定的函数,并在调用匿名函数时提供预设参数与提供的任何新参数一起提供:>

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
登录后复制
登录后复制
登录后复制
>提供给makeFunc的第一个参数被认为是您要调用的函数的引用(是的,在这个简单的示例中没有错误检查),并且从参数数组中删除。然后,makeFunc返回一个使用函数对象的应用方法来调用指定函数的匿名函数。>

应用程序的第一个参数是指该函数将被调用;基本上,这将引用所调用函数的关键字。目前,这有点先进,所以我们将其保持无效。第二个参数是一个值数组,将转换为该函数的参数对象。 makefunc将原始值的原始数组连接到提供给匿名函数的一系列参数上,并将其提供给所谓的函数。

>说,在模板始终相同的情况下,您需要输出一条消息。为了使您避免每次调用格式函数时都必须引用模板,您可以使用MakeFunc Utility函数返回将为您调用格式并自动填写模板参数的函数:>

>您可以像这样重复调用Majortom函数:

format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
登录后复制

>每次调用Majortom函数时,都会使用第一个参数(已填写的模板)调用格式函数。

var args = Array.prototype.slice.call(arguments);
登录后复制
创建自我引用函数

>您可能认为这很酷,但是等等,争论还有一个惊喜。它具有另一个有用的属性:Callee。 gragments.callee包含对创建参数对象的函数的引用。我们如何使用这样的东西? gruments.callee是匿名函数可以引用自身的一种方便方式。
function makeFunc() {
  var args = Array.prototype.slice.call(arguments);
  var func = args.shift();
  return function() {
    return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
  };
}
登录后复制
>

但是,我想创建一个该功能的特殊版本,每次之间重复3次,延迟2秒。通过我的重复功能,我可以做到这一点:
var majorTom = makeFunc(format, "This is Major Tom to ground control. I'm %1.");
登录后复制
majorTom("stepping through the door");
majorTom("floating in a most peculiar way");
登录后复制
"This is Major Tom to ground control. I'm stepping through the door."
"This is Major Tom to ground control. I'm floating in a most peculiar way."
登录后复制
调用某物函数的结果是一个警报框重复3次,每个警报之间有2秒的延迟。
repeat is a function that takes a function reference, and 2 numbers. The first number is how many times to call the function and the second represents the delay, in milliseconds, between each call. Here's the definition for repeat:

登录后复制
function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};
登录后复制
登录后复制
登录后复制

经常询问有关JavaScript参数的问题

> JavaScript中的“参数”对象是什么?它包含一个类似数组的结构,所有参数传递给了函数。当函数需要处理可变数量的参数时,此对象很有用。重要的是要注意,“参数”对象不是一个实际的数组,但是如果需要的话,它可以转换为一个。但是,您可以使用array.from()方法或传播操作员(…)将其转换为数组。以下是一个示例:

函数convertargstoArray(){

var argsarray = array.from(grom(grom);

//或

//或

//或
var argsArray = [... gruments];
>}
}
}
}

> javaScript中的“ typeof”运算符是什么?它返回一个指示未评估操作数的字符串。例如,“ typeof 3”将返回“ number”和“ hello”'将返回“字符串”。

我如何在javascript中使用“ typeof”与javaScript?

您可以使用“ typeof”操作员检查传递给函数的每个参数的类型。以下是一个示例:

函数checkArgStype(){

>(var i = 0; i console.log(type of grag grag(type of grag>);

>>} } } } } } } }
第一个参数传递给函数。同样,“参数[1]”是指第二个论点,依此类推。如果没有传递参数,则“参数[0]”将是“未定义的”。

我可以在JavaScript中修改“参数”对象?但是,通常不建议这样做,因为它可能导致令人困惑和难以删除的代码。在严格的模式下,任何修改“参数”对象的尝试都会丢弃错误。
>
“参数”对象的长度属性是什么?“参数”对象的长度属性返回传递给该函数的参数的数量。当您需要迭代论点或确定通过了多少参数时,这很有用。
>

>我可以在JavaScript中使用默认参数的“参数”对象?如果调用具有默认参数的函数的参数少于参数,则“参数”对象仅包含传递的实际参数,而不包含默认值。此属性被弃用,不应在新代码中使用。相反,您可以使用命名函数表达式或箭头函数。

以上是参数:JavaScript奇数的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板