-1

伙计们,我正在尝试学习一些 javascript,并且我有一个我认为很重要的问题要问。所以到目前为止我得到的是当我做这样的事情时:

var a=function(){} 

在创建阶段,将在内存中创建一个a具有未定义值的变量 (),在执行期间,该变量a将指向函数所在的内存槽。

那么 a 指向的旧点(具有未定义值的点)会发生什么?另外,如果我设置b为等于a这意味着它们将指向同一个内存插槽,对吗?

b 之前指向的插槽发生了什么?

最后,函数是否在创建阶段被保存到内存中,但由于没有指向它或它只是在执行阶段被保存而无法调用?

谢谢,我希望你能帮助我让我的头脑清醒(我无法入睡这些问题在我的头上:D)

4

3 回答 3

1

那么旧点a指向(具有未定义值的点)会发生什么?

我不知道任何 JavaScript 引擎的确切细节,但我怀疑实际上并没有这样的插槽。相反,undefined可能只是一个特殊的值,a表示它不指向任何地方(类似于NULLC 中的)。

如果真的有一个内存槽undefined,那么它就是一个所有未定义变量都指向的对象。它什么也没有发生,因为仍然有很多其他变量指向它。

另外,如果我将 b 设置为 a,这意味着它们将指向同一个内存插槽,对吗?

是的。当您在 JavaScript 中分配变量时,它只是复制引用。

b 之前指向的插槽发生了什么?

如果还有其他东西指向它,那就什么都没有了。如果没有其他东西指向它,垃圾收集器最终将回收它的内存。

最后,函数是否在创建阶段被保存到内存中,但由于没有指向它或它只是在执行阶段被保存而无法调用?

它在创建时被保存。可以创建一个函数而无需将其分配给变量——这是一个常见的习惯用法,称为立即调用函数表达式

(function() { console.log("Function is running"); })();

这个函数被创建,被调用,然后变得不可访问。垃圾收集器最终会回收它。

于 2018-12-12T19:48:08.373 回答
0

我想我明白你想问什么。当您在 JavaScript 或任何具有自己的垃圾收集器的编程语言中有一个变量,并且您正在引用内存中的一部分时......例如,让我们说 var A = 50; 变量 B = 75;

而你想转身重新分配 A = B;

内存位置将被释放,A 现在为 75。

以下是一些可以更详细解释的文档: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

于 2018-12-12T19:33:30.993 回答
0

var a=函数(){}

这不会创建指向未定义的指针,然后将其重新指向函数。它直接指向函数。

即使你做了

var a;
a = function(){};

a 不指向未定义的随机内存位置。A 未定义。未定义是一个值。然后你给它分配一个指向函数的引用。Undefined 不需要被清除,因为它被替换了。

此外,基值被复制,而不是被引用,所以:

A = 50; var B = 75; A = B;

不使用 3 个内存位置,只使用 2 个,先是 50 和 75,然后是 75 和 75。

如果它是对象,那么它将是引用。当对象被取消引用时,它们会被垃圾收集器删除,这是一个释放不再被任何人引用的对象内存的例程。

于 2018-12-12T19:43:49.040 回答