Javascript 对函数调用的引用

Javascript 对函数调用的引用,javascript,Javascript,例如,我们可以将函数调用分配给javascript中的新引用,因此我们有一个函数display,当我们调用它时,我们使用display()。我们知道,在javascript中,我们也可以为此创建一个引用,例如var call=display(),那么我可以使用这个call()引用调用这个函数吗?下面是我的代码,它不工作,它显示outerDisplay不是一个函数,为什么会发生这种情况 <script> var obj = { name: 'Saurabh',

例如,我们可以将函数调用分配给javascript中的新引用,因此我们有一个函数display,当我们调用它时,我们使用display()。我们知道,在javascript中,我们也可以为此创建一个引用,例如
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将为您提供一些随机值。那么这个问题的解决方案是什么