Javascript var/let/const 变量初始化
Posted
技术标签:
【中文标题】Javascript var/let/const 变量初始化【英文标题】:Javascript var/let/const variable initialization 【发布时间】:2021-10-19 23:29:38 【问题描述】:这里是javascript新手。 来自https://www.freecodecamp.org/news/var-let-and-const-whats-the-difference/ :
它们都被吊到了其范围的顶部。但是虽然 var 变量用 undefined 初始化,let 和 const 变量是 未初始化。 虽然 var 和 let 可以声明而不是 已初始化,const 必须在声明期间初始化。所以“const”很明显它被初始化为它最初声明的值。
“变量”:
a) not declared, initialized as undefined
b) declared, initialized accordingly
“让”:
a) not declared, initialized as ______???______
b) declared, initialized accordingly
什么是“let”初始化,就好像它一开始没有声明一样?
【问题讨论】:
"什么是 "let" 初始化,就好像它一开始没有声明一样?" 什么都没有。它无法使用。如果您尝试读取或写入该变量,您将进入the temporal dead zone 并且您会收到错误消息。另见:Are variables declared with let or const hoisted? 请注意,虽然“用 let 和 const 声明的变量也会被提升”,“直到它们被初始化的那一行被执行,任何访问这些变量的代码都会抛出异常”。 developer.mozilla.org/en-US/docs/Glossary/Hoisting 我的建议:1) 永远不要使用var
。如果可能,将其从现有代码中重构出来。 2) 如果值不会改变,请始终使用const
。例如,如果您创建一个数组以稍后将元素推入其中,则该数组仍然可以是const
,因为它是一个不会更改的引用。 3) 仅当您确定变量会更改时才使用let
。例如,for 循环索引。 4) 将const
和let
声明放在尽可能靠近它们使用的位置,就像在其他编程语言中一样,并且忘记它们的提升。
(续)如果某些代码在声明之前尝试使用它们,您将在运行时收到错误消息。 5) 使用 JSDoc 类型提示或 TypeScript。 JSDoc 可以在 Visual Studio Code 等编辑器中创造奇迹,因为编辑器会显示每个与类型相关的错误,即使在纯 JavaScript 代码中也是如此。此外,编辑器将在声明之前显示何时使用值,因此您根本不必考虑提升。
【参考方案1】:
let 如果已声明但未初始化,则其默认值设置为 undefined。
let x;
console.log(x);
>> undefined
【讨论】:
问题是if not declared, to what it is initialized
@Sirode 你会看到一个错误:Uncaught ReferenceError: x is not defined
fiddle【参考方案2】:
好吧,考虑它的最简单方法是只有一种类型的未声明变量(在从未声明的意义上,否则你只会得到一个ReferrenceError
)。如果它从不声明,则 JavaScript 引擎不能选择将其设为 var
或 let
或 const
以满足开发人员的需求。
因此,任何从未声明的变量使用都会变成var
。而var
被初始化为undefined
。
注意:似乎有人不同意,但没有花时间解释原因。我很高兴了解我的错误并提高我的知识。
【讨论】:
【参考方案3】:提升的let
变量被初始化为一个特殊的“值”,在访问时会抛出一个ReferenceError
:
function foo()
console.log(x) // ReferenceError: Cannot access 'x' before initialization
let x
foo()
let 和 const 声明定义了范围为正在运行的执行上下文的 LexicalEnvironment 的变量。在评估变量的 LexicalBinding 之前,不得以任何方式访问变量 ...。
https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-let-and-const-declarations
【讨论】:
以上是关于Javascript var/let/const 变量初始化的主要内容,如果未能解决你的问题,请参考以下文章
javascript精雕细琢:var let const function声明的区别