gpt4 book ai didi

JavaScript 局部变量的生命周期

转载 作者:行者123 更新时间:2023-12-01 01:53:52 25 4
gpt4 key购买 nike

我在 C、C++ 方面很熟练,但对 Javascript 很陌生。我正在学习 Three.js,但我很难理解这里发生的事情:

var camera, scene, renderer, control;

init();

function init() {
scene = new THREE.Scene();

var light = new THREE.DirectionalLight( 0xffffff, 2 );
light.position.set( 1, 1, 1 );
scene.add( light );
}

这是我想问的问题的简化版本。我读过很多文档和论坛,但在任何地方都找不到。

如果我在函数内创建“var light”并用“new”为其赋值,它将正确创建对象。因为我在函数“init”内部声明了它,所以它是局部变量。我了解到 javascript 中的对象是通过引用传递的。那么如果我通过“scene.add(light);”将其添加到场景中,为什么它仍然有效?我传递了引用,那么对象本身应该被销毁,当我在“init”之外调用渲染函数时,它应该失败,对吧?

我的问题是,如果“new”关键字以某种方式使局部变量即使在函数体结束时也仍然存在,从而在仍然有东西引用它的情况下保持对象处于事件状态?

我做对了吗?

最佳答案

虽然变量light是在函数内声明的,但退出后就不再存在了。变量引用的对象通过 scene.add(light)“添加到场景”,并可能创建对该对象的第二个引用。函数退出后,第一个引用 light 就会超出范围,并且该引用将被删除,留下来自 scene.add(light) 的引用。

只有在没有引用对象时,JavaScript 垃圾收集才会清理该对象。

new 除了创建对象的新实例之外没有任何特殊作用。

关于JavaScript 局部变量的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com