【问题标题】:javascript by reference and memoryjavascript 通过引用和内存
【发布时间】:2018-12-12 19:29:15
【问题描述】:

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

var a=function(){} 

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

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

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

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

谢谢,希望你能帮我理清思路(这些问题我睡不着:D)

【问题讨论】:

    标签: javascript pass-by-reference function-expression


    【解决方案1】:

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

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

    如果确实有undefined 的内存槽,它是所有 未定义变量指向的单个对象。它什么也没发生,因为还有很多其他变量指向它。

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

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

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

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

    函数最后是在创建阶段被保存到内存中,但是因为没有指向它或者它只是在执行阶段被保存而不能被调用?

    它在创建时被保存。无需将函数分配给变量即可创建函数——这是一个常见的习惯用法,称为Immediately Invoked Function Expression

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        var a=function(){}

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

        即使你这样做了

        var a;
        a = function(){};
        

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-01-01
          • 2013-07-27
          • 1970-01-01
          • 2022-11-26
          • 2013-11-10
          • 2014-12-02
          • 2016-08-18
          • 1970-01-01
          • 2015-09-02
          相关资源
          最近更新 更多