javascript自变量及其用法
我是javascript新手。我这里有一个简单的问题 我看到下面的代码snipet: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:为什么我
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
也应该是正确的。