Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript自变量及其用法_Javascript_Node.js - Fatal编程技术网

javascript自变量及其用法

javascript自变量及其用法,javascript,node.js,Javascript,Node.js,我是javascript新手。我这里有一个简单的问题 我看到下面的代码snipet: var self = this; ..... self.push = function () { var args = [].concat.apply([], arguments); args.forEach(self.write); return self; }; self.write is another function. 问题1:为什么设置self=this 问题2:为什么我

我是javascript新手。我这里有一个简单的问题

我看到下面的代码snipet:

var self = this;
.....
self.push = function () {
    var args = [].concat.apply([], arguments);
    args.forEach(self.write);
    return self;
};

self.write is another function.
问题1:为什么设置self=this

问题2:为什么我们不能像参数那样简单地编写push函数。forEach(self.write)

问题1:为什么设置self=this

当内部函数希望在闭包中保留对外部函数的
this
的引用时,使用该函数。
this
的值由函数的调用方式设置,因此内部函数有自己的
this
来“隐藏”外部函数的
this

问题2:为什么我们不能像参数那样简单地编写push函数。forEach(self.write)

因为不是数组,所以没有
forEach
方法。该行:

var args = [].concat.apply([], arguments);
使用arguments对象中的成员创建数组。它还可以做到:

[].forEach.call(arguments, ...)
或(许多人喜欢):

编辑 Jack提出的一点是,似乎函数中的
这个
就是
self
。但是
由调用设置,而不是由函数的分配或创建方式(忽略)设置,因此在看到调用之前,您无法判断函数的
将是什么。你还没有发布,所以我们不知道。e、 g

self.push = function () {
    ...
}
在这里,如果函数被称为
self.push()
,那么它的
this
无论如何都会被设置为
self
。但是,如果其
设置为其他内容,例如

var pushAlias = self.push;
...
pushAlias();
此处调用了
self.push
,但未设置其
this
,因此它将默认为全局/窗口对象(或在严格模式下未定义)。在函数中使用
self
意味着这无关紧要,函数在分配给
push
方法时仍然有一个对外部
this
的引用

问题1:为什么设置self=this

当内部函数希望在闭包中保留对外部函数的
this
的引用时,使用该函数。
this
的值由函数的调用方式设置,因此内部函数有自己的
this
来“隐藏”外部函数的
this

问题2:为什么我们不能像参数那样简单地编写push函数。forEach(self.write)

因为不是数组,所以没有
forEach
方法。该行:

var args = [].concat.apply([], arguments);
使用arguments对象中的成员创建数组。它还可以做到:

[].forEach.call(arguments, ...)
或(许多人喜欢):

编辑 Jack提出的一点是,似乎函数中的
这个
就是
self
。但是
由调用设置,而不是由函数的分配或创建方式(忽略)设置,因此在看到调用之前,您无法判断函数的
将是什么。你还没有发布,所以我们不知道。e、 g

self.push = function () {
    ...
}
在这里,如果函数被称为
self.push()
,那么它的
this
无论如何都会被设置为
self
。但是,如果其
设置为其他内容,例如

var pushAlias = self.push;
...
pushAlias();
此处调用了
self.push
,但未设置其
this
,因此它将默认为全局/窗口对象(或在严格模式下未定义)。在函数中使用
self
意味着这无关紧要,函数在分配给
push
方法时仍然有一个对外部
this
的引用。

Q1在Javascript中,“this”在不同的时间可以是不同的东西,通过使self“this”表示“this”在分配任务时,将始终使用此文件

Q2参数看起来有点像数组,但它不是,所以首先它创建了一个数组,以便可以对其调用数组函数。

Q1在Javascript中,“this”可以在不同的时间是不同的,通过将self设置为“this”,这意味着赋值时的“this”将始终是this所使用的


Q2参数看起来有点像数组,但它不是,所以首先它创建了一个数组,以便可以对其调用数组函数。

尽管如此,
self
push()中引用
this
,但在这里似乎没有任何作用
方法也应该是正确的。
self
在这里似乎没有什么作用,在
.push()
方法中引用
this
也应该是正确的。