Javascript 对函数调用的引用
例如,我们可以将函数调用分配给javascript中的新引用,因此我们有一个函数display,当我们调用它时,我们使用display()。我们知道,在javascript中,我们也可以为此创建一个引用,例如Javascript 对函数调用的引用,javascript,Javascript,例如,我们可以将函数调用分配给javascript中的新引用,因此我们有一个函数display,当我们调用它时,我们使用display()。我们知道,在javascript中,我们也可以为此创建一个引用,例如var call=display(),那么我可以使用这个call()引用调用这个函数吗?下面是我的代码,它不工作,它显示outerDisplay不是一个函数,为什么会发生这种情况 <script> var obj = { name: 'Saurabh',
var call=display()
,那么我可以使用这个call()引用调用这个函数吗?下面是我的代码,它不工作,它显示outerDisplay不是一个函数,为什么会发生这种情况
<script>
var obj = {
name: 'Saurabh',
display: function () {
console.log(this.name); // 'this' points to obj
}
};
var outerDisplay = obj.display(); // Saurabh
outerDisplay();
</script>
var obj={
名称:“Saurabh”,
显示:函数(){
console.log(this.name);/“this”指向obj
}
};
var outerDisplay=obj.display();//索拉布
outerDisplay();
outerDisplay
不是函数,因为它已调用obj.display()。
但是,如果您像下面这样更改代码,它将不起作用:
var outerDisplay = obj.display;
outerDisplay(); // it won't work!
因为它失去了这个函数的“所有者”。您必须通过呼叫
告知谁是所有者
var obj={
名称:“Saurabh”,
显示:函数(){
console.log(this.name);/“this”指向obj
}
};
var outerDisplay=obj.display;//索拉布
outerDisplay.call(obj)代码>有两件事你弄错了
首先,当您想将函数分配给变量时,您不应该调用它。
赋值时调用函数将计算函数的返回值
所以如果你这样做了
var outerDisplay = obj.display; // this will assign the function and you may call it as
outerDisplay(); // will call your assigned function
如果你这样做
var outerDisplay = obj.display(); // this will call it immediately and assign what is returned
outerDisplay(); // throw an error as outerDisplay is not a function
你错过的第二件事
将函数分配给另一个变量时,调用该变量将在不同的上下文中运行
这里这个指向窗口对象
window.name = "Prabhat"
var outerDisplay = obj.display;
outerDisplay(); // print Prabhat
()
函数名调用函数后,它不会创建对它的另一个引用。请详细说明obj.display()
返回undefined
,因为您正在调用display
函数,该函数随后不会显式返回值(因此默认情况下它返回undefined)。因此,outerDisplay
设置为undefined
,因此当您尝试使用()
调用它时,它不会起作用,您可以执行var outerDisplay=obj.display;outerDisplay();但此时“this”将表示窗口,因此this.name将为您提供一些随机值。那么这个问题的解决方案是什么