首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >变量定义和JavaScript中的声明有什么区别?

变量定义和JavaScript中的声明有什么区别?
EN

Stack Overflow用户
提问于 2013-12-29 12:02:08
回答 9查看 15.1K关注 0票数 22

这是一个变量定义还是一个声明?为什么?

var x;

在这条语句之后,..and是为x保留的内存吗?

编辑:在C中,int x;是一个声明,int x = 5;是一个定义。JS中的类比是什么?维基百科说,声明分配内存,而定义为这个分配的内存赋值。

第二次编辑:我认为@Deryck的解释听起来很棒,但有一些输出与他的解释不一致:

代码语言:javascript
复制
> var x;
undefined
> x
undefined // now it looks like x is defined to the value undefined
> y
ReferenceError: y is not defined

如果ReferenceError输出显示为y is not declared,这将是有意义的。但我经常读到JS有两个非值:nullundefined。所以var x应该是一个值为undefined的定义。

EN

回答 9

Stack Overflow用户

发布于 2013-12-29 12:24:23

var x是一个声明,因为您不是定义它拥有什么值,而是声明的存在和内存分配的需要。

var x = 1既是声明也是定义,但它们是分开的,x在开头被声明为,而它的定义出现在指定的行上(变量赋值发生在行内)。

我看到你已经理解了hoisting的概念,但对于那些不理解的人来说,Javascript接受每个变量和函数声明,并将其放在(相应作用域的)顶部,然后向下滴流,按顺序分配它们。

不过,您似乎已经了解了大部分内容。如果您想要一些高级的、深入的探索,这里有一个很好的资源。但我有种感觉你以前去过那里。

Javascript Garden

PS -你在C变量dec/def和JS之间的类比恰到好处。你在维基百科上看到的是正确的。

票数 22
EN

Stack Overflow用户

发布于 2013-12-29 12:15:48

声明一个变量就像是告诉(javascript)编译器,这个标记x是我想在以后的中使用的东西。它确实指向内存中的一个位置,但它还没有包含值。即。它是undefined

代码语言:javascript
复制
var x;

定义它意味着给它一个值,你可以这样做:

代码语言:javascript
复制
x = 10; // defining a variable that was declared previously

或者像这样:

代码语言:javascript
复制
var y = 20; // declaring and defining a variable altogether.

http://msdn.microsoft.com/en-us/library/67defydd(v=vs.94).aspx http://www.w3schools.com/js/js_variables.asp

票数 13
EN

Stack Overflow用户

发布于 2018-10-12 13:23:56

为了更好的解释,我会给你一个很长的答案。

当javascript引擎在内存中找不到特定的变量时,它将抛出一个错误。更具体地说,当javascript引擎(执行上下文)不能“引用”内存中的变量时,它将抛出ReferenceError。这与声明错误并不完全相同,至少在javascript中是这样。

not defined错误和值undefined之间存在差异。

这么做吧

代码语言:javascript
复制
var a = undefined;

代码语言:javascript
复制
var a;

都会记录相同的结果,即undefined。这是因为,当您简单地执行var a;时,javascript引擎会为变量分配内存,并自动将其值设置为undefined,这与说a根本不存在不同-在这种情况下,它将抛出ReferenceError

吊装

代码语言:javascript
复制
console.log(a);    // undefined
var a = 'something';

将会记录undefined,因为javascript引擎知道在代码中的某个地方有一个声明为的变量-这意味着javascript引擎在执行代码之前实际上做了一些事情-它做的一件事就是提升变量。简单地说,上面的代码与

代码语言:javascript
复制
var a;             // hoisted (declared and defined the value `undefined`)
console.log(a);    // undefined
a = 'something'    // update the defined value to `something`

所以,是的,声明和定义在javascript中同时发生(自动-如果你不自己做的话),默认的定义值是undefined

ES6

只有一个补充说明

代码语言:javascript
复制
const a;

将在需要初始化器(定义)的地方抛出SyntaxErrorconst是唯一需要手动声明和定义的时候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20822022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档