那这个function Names() {}和Names=*中的Names是同一个变量吗?

画蓝线的两个Names,是否是同一个对象,是否形成了闭包
Names = (function () {
function Names() {console.log(Names.HOME)}
Names.HOME = "home";
return Names;
})();
Names2 = (function () {
function Names() {console.log(_HOME)}
var _HOME = "home";
return Names;
})();
有可能是我问的方法不对。Names2肯定是(function () {})();这里就没有释放,形成了闭包。
Names这个是否也形成了闭包,没有释放(function () {})();?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
抱歉, 之前说错了
不是形成闭包, 这是个典型的匿名函数赋值, 匿名函数中的Names和外边的Names互不影响, 流程可理解为
语法上js没有传值还是引用的说法, 变量赋值变量的时候, 如果 typeof v == "object" 便是传引用, 元数据(字符串, 数字等)则是传值
没看到哪里有var Names=*
我先把我自己想法写出来。是同一个对象,没有形成闭包。
我把你的方法改成了这样、用同名容易混淆
我的代码是、声明一个function叫Name
把外部的Names赋值home字符串
把Name方法赋值给Names
你的代码也可以改成这样
外部的Names被赋值了几次、你的代码相当于内部声明一个、涉及闭包、Name.HOME也是赋值给内部Name这个function,然后return给外部Names
对底层不是太清楚,在我的观点看来,这两个是一样的,就好比一个人,在公司叫
小王,在朋友面前叫老王,小王、老王只是名字不同,但是是同一个人。对于更底层的编译器来说,只有地址是唯一的,名字只是给人看的。所以名字可以有外号,变量可以有引用。我只要知道它们代表的是同一种东西就好了,没必要纠结为什么名字会不一样。对于传值还是传引用,就好比了解一个人,你知道他的名字但没见过他的人,这叫
传引用,如果当面见到他,这叫传值,因为你见到了他的本尊。内外 Names 不是一个变量。
内部 Names 没有释放。