首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript‘`arguments`’包含“`this`”吗?

JavaScript‘`arguments`’包含“`this`”吗?
EN

Stack Overflow用户
提问于 2015-10-28 01:27:01
回答 2查看 183关注 0票数 2

我正在尝试理解函数中JavaScript的arguments隐式变量。有些教程删除它的第0元素,并说它包含this,但其他一些教程不删除第0元素。我很困惑。

我编写了这个代码示例,它显示了arguments不包含this

代码语言:javascript
复制
function aaa () {
    console.log(arguments[0])
}

aaa(1,2,3);

有时arguments可能包含this吗?我想知道为什么有些教程在使用arguments之前将第0元素分割开。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 01:53:08

参数是传递给函数的原始参数的数组*,与"this“变量没有直接关系。

也就是说,不同的教程可能试图使用函数的作用域(作用域=> "this“变量)来解释函数引用是如何工作的等等。这很容易涉及到传递数组和移除第一个参数。

考虑一下下面这个简单的片段:

代码语言:javascript
复制
var sample = function(a,b,c){ 
    console.log(arguments, this); 
}; 
sample(1,2,3);

产出:

1,2,3,窗口

正如我们现在所知道的,“这个”是一个特殊的变量,它与函数的范围有关。有一些大量的文章描述了它所做的/如何工作的,但是在这个上下文中,您可能已经看到了.call或.apply使用的一些东西:

代码语言:javascript
复制
sample.call(sample, 1, 2, 3)

代码语言:javascript
复制
sample.apply(sample, [1,2,3])

这些代码片段都执行相同的操作--它们将函数的"this“范围从窗口对象(因为"sample”声明为全局函数)转换为"sample“函数本身,并传递参数1、2和3。

1,2,3,样本函数

在这个上下文中,一些教程将移除第一个参数的原因是,当作用域被更改时,经常会有“助手”函数使其更加明显,而且这些帮助函数多次将执行新函数的范围作为它们的第一个参数。因此,它们移除第一个参数,并在(实质上)调用应用时使用该参数。一个常见的示例是bind(),如下所示:

代码语言:javascript
复制
Function.prototype.bind = function(scope){
    var me = this,
        args = Array.prototype.slice.apply(arguments, [1]);

        return function () {
            var handlerArgs = []; 
            for (i = 0; i < args.length; i++) {
                handlerArgs.push(args[i]);
            }
            for (var i = 0; i < arguments.length; i++) {
                handlerArgs.push(arguments[i]);
            }
            me.apply(scope, handlerArgs);
        };
};

现在,你可以打电话:

代码语言:javascript
复制
var bound = sample.bind(sample, 1);
bound(2,3);

...and获得输出:

1,2,3

您可以看到,在最初绑定函数时,我们传递一些参数(作用域和第一个参数),此时我们将第一个参数("sample",因为这是“范围”,必须处理与任何其他参数不同),然后在调用bind ()时,将1以及2和3按到最终参数列表中。

一开始有点让人困惑,但希望这能帮上一点忙。

*技术上是阵列状

票数 1
EN

Stack Overflow用户

发布于 2015-10-28 01:34:58

很可能您有一个类似于blah(x)的函数,在这种情况下,您可以去掉第一个参数,因为它已经被捕获为变量x,并且您需要传递的其余参数。

第一个参数不是this

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33381377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档