Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript函数引用_Javascript - Fatal编程技术网

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;