所以我一直在努力学习JS上下文并理解“this”关键字。这是我一直在使用的一些代码:
var addNumbers = function(num1, num2){
console.log(num1+num2);
}
var newAdd = addNumbers.bind(this,1,2);
newAdd();
以上记录值3,应该如此。但是,如果我在没有“this”关键字的情况下调用addNumbers.bind:
var newAdd = addNumbers.bind(1,2);
newAdd()调用返回NaN。为什么这个NaN会发生?而且,我只是通过尝试将“this”作为第一个参数加入解决方案,而不一定是出于直觉。为什么将“this”作为参数传递?在这种情况下,“this”代表什么背景?感谢。
编辑:此问题与任何与.bind()相关的问题都不同,因为它不是要求对此函数进行一般性说明。我问的是具体的用例,需要一个具体的答案。其他建议的副本更加通用,并且对不同类型的答案更加开放。
答案 0 :(得分:3)
.bind
用于将“this”上下文分配给另一个对象
在您的情况下,.bind(1,2)
将“this”分配为1
且参数为num1=2
,num2=undefined
,而且2 + undefined是JS中的NaN
如果您在对象中有一个函数,请说obj.func(asd)
,this
将在函数func中为obj
。如果您想更改this
的上下文,可以使用bind
或apply
(就像绑定一样,但它直接调用该函数,而不是创建一个新函数)
答案 1 :(得分:0)
简单地说,因为Function#bind
function总是将函数的this
上下文作为第一个参数:
fun.bind(thisArg [,arg1 [,arg2 [,...]]])
在您的示例中,您将1
作为this
的值传递(这不是无效的,但可能不是您尝试做的事情):
var newAdd = addNumbers.bind(1,2);
因此,如果您不需要this
参数,则可以通过null
:
var newAdd = addNumbers.bind(null, 1, 2);