JavaScript函数引用
考虑这段代码,它将JavaScript函数引用,javascript,Javascript,考虑这段代码,它将a设置为函数。然后f指向a,但是a被设置为null var a = function () { return 5; }; var f = a; a = null; 但是,当调用f()时,5会打印出来 console.log(f()); 五, 为什么调用f()不会导致空对象引用 在回答问题之前,我会说函数是javascript中的对象,所以我们实际上是在讨论一般的对象引用 实际上,内存中的对象不能null。您只是将对实际对象的引用设置为nullf是对该对象的引
a
设置为函数。然后f
指向a
,但是a
被设置为null
var a = function () {
return 5;
};
var f = a;
a = null;
但是,当调用f()
时,5
会打印出来
console.log(f());
五,
为什么调用f()
不会导致空对象引用
在回答问题之前,我会说函数是javascript中的对象,所以我们实际上是在讨论一般的对象引用 实际上,内存中的对象不能
null
。您只是将对实际对象的引用设置为null
f
是对该对象的引用,就像a
一样。您正在使a
不再是对该对象的引用,但这根本不会影响f
垃圾收集器将负责实际删除整个对象
如果不清楚,我将用其他方式解释:
var a={}代码>在内存中生成对象a
实际上不是该对象,而是对它的引用
var f=a
意味着f
现在引用的对象与a
引用的对象相同
a=null
表示a
不再引用对象,但不会影响对象本身<代码>f
仍然引用该对象。我将在回答之前指出函数是javascript中的对象,因此我们实际上是在讨论对象引用
实际上,内存中的对象不能null
。您只是将对实际对象的引用设置为null
f
是对该对象的引用,就像a
一样。您正在使a
不再是对该对象的引用,但这根本不会影响f
垃圾收集器将负责实际删除整个对象
如果不清楚,我将用其他方式解释:
var a={}代码>在内存中生成对象a
实际上不是该对象,而是对它的引用
var f=a
意味着f
现在引用的对象与a
引用的对象相同
a=null
表示a
不再引用对象,但不会影响对象本身f
仍然引用该对象。下面是一步一步发生的情况:
var a = function () {
return 5;
};
将函数引用指定给变量a
将相同的函数引用指定给变量f
。此时,a
和f
都包含对同一函数的引用
清除a
,使其不再包含该函数引用。但是,f
仍然包含函数引用,并且与a
无关,因此您可以根据自己的内心内容更改a
的值,这不会影响f
的功能。在上面的第二步之后,每个变量都有自己对函数的唯一引用<代码>a
和f
没有相互指向对方
就像你有两个朋友,你告诉他们每个人一个秘密密码。现在,你告诉第一个朋友密码现在不同了。第二个朋友仍然拥有原始密码-他们不会因为您告诉第一个朋友不同的内容而受到影响。以下是逐步发生的情况:
var a = function () {
return 5;
};
将函数引用指定给变量a
将相同的函数引用指定给变量
f
。此时,a
和f
都包含对同一函数的引用
清除
a
,使其不再包含该函数引用。但是,f
仍然包含函数引用,并且与a
无关,因此您可以根据自己的内心内容更改a
的值,这不会影响f
的功能。在上面的第二步之后,每个变量都有自己对函数的唯一引用<代码>a和f
没有相互指向对方
就像你有两个朋友,你告诉他们每个人一个秘密密码。现在,你告诉第一个朋友密码现在不同了。第二个朋友仍然拥有原始密码-他们不会受到您告诉第一个朋友不同内容的影响。(在JavaScript中)变量就像一个可以包含某些内容的框(var A=…;
)。两个框可以包含相同的内容(var f=a;
)。如果将其他内容放入其中一个框(a=null
),则不会更改另一个框(f
)的内容,即使它最初包含相同的内容。(在JavaScript中)变量就像一个可以包含某些内容的框(var a=…;
)。两个框可以包含相同的内容(var f=a;
)。如果将其他内容放入其中一个框(a=null
),则不会更改另一个框(f
)的内容,即使它最初包含相同的内容
a = null;