吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 980|回复: 6
收起左侧

[已解决] js 为事先声明的变量赋值报错"变量已声明"??

 关闭 [复制链接]
ing 发表于 2020-7-8 16:11
本帖最后由 ing 于 2020-7-9 17:39 编辑

main.js,引入hello模块,调用其函数,如下
捕获.PNG
被提示module早已声明
捕获.PNG


如果我删去 const moudle = ... 再次运行成功了,这是为什么?先声明再为变量赋值反而错了??
捕获.PNG
捕获.PNG

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cube 发表于 2020-7-9 16:58
运行某个模块时,会自动生成一个名称为module的对象.
所以,你const module之后,就重定义了.
因此不需要定义直接使用.
参考: https://nodejs.org/api/modules.html#modules_the_module_object

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ing + 1 + 1 我很赞同!

查看全部评分

badyun 发表于 2020-7-8 22:43
因为const定义的变量不可以修改,而且必须初始化,跟var不一样

fan1191237272 发表于 2020-7-9 16:17
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。
 楼主| ing 发表于 2020-7-9 17:34
cube 发表于 2020-7-9 16:58
运行某个模块时,会自动生成一个名称为module的对象.
所以,你const module之后,就重定义了.
因此不需要定 ...

我知道了,我在 main.js 引入 hello.js 模块,然而我 hello 模块内定义了module对象所以造成了冲突
不想当咸鱼 发表于 2020-7-9 22:01
badyun 发表于 2020-7-8 22:43
因为const定义的变量不可以修改,而且必须初始化,跟var不一样

你好,我刚才在浏览器试了下,
const it = {qwe: {}}
it.qwe = {asd:'231'}
console.log(it)
可以发现能正常打印,且it = {qwe:{asd: '231'}}
所以我觉得你这种说法不太对(只是请教)
然后试了下is = 123就会报错,这样所以我觉得应该不是const定义的变量不可修改,因为it其实是对象的地址,修改对象本身不影响,所以我觉得是前面定义的module覆盖了JS中模块化概念的module,我觉得二楼说的对,而不是常量的原因。
badyun 发表于 2020-7-9 23:08
不想当咸鱼 发表于 2020-7-9 22:01
你好,我刚才在浏览器试了下,
const it = {qwe: {}}
it.qwe = {asd:'231'}

{qwe: {}}这种是对象。而对于对象,都是引用型的,你在给对象里面赋值的时候,对象的属性变了,但他的指针没变,这种情况下是允许的。

const定义的变量不可修改这句话翻译下就是定义的值的指针不可修改
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 14:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表