这是一个变量定义还是一个声明?为什么?
var x;
在这条语句之后,..and是为x保留的内存吗?
编辑:在C中,int x;
是一个声明,int x = 5;
是一个定义。JS中的类比是什么?维基百科说,声明分配内存,而定义为这个分配的内存赋值。
第二次编辑:我认为@Deryck的解释听起来很棒,但有一些输出与他的解释不一致:
> 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有两个非值:null
和undefined
。所以var x
应该是一个值为undefined
的定义。
发布于 2013-12-29 12:24:23
var x
是一个声明,因为您不是定义它拥有什么值,而是声明的存在和内存分配的需要。
var x = 1
既是声明也是定义,但它们是分开的,x
在开头被声明为,而它的定义出现在指定的行上(变量赋值发生在行内)。
我看到你已经理解了hoisting
的概念,但对于那些不理解的人来说,Javascript接受每个变量和函数声明,并将其放在(相应作用域的)顶部,然后向下滴流,按顺序分配它们。
不过,您似乎已经了解了大部分内容。如果您想要一些高级的、深入的探索,这里有一个很好的资源。但我有种感觉你以前去过那里。
PS -你在C变量dec/def和JS之间的类比恰到好处。你在维基百科上看到的是正确的。
发布于 2013-12-29 12:15:48
声明一个变量就像是告诉(javascript)编译器,这个标记x
是我想在以后的中使用的东西。它确实指向内存中的一个位置,但它还没有包含值。即。它是undefined
var x;
定义它意味着给它一个值,你可以这样做:
x = 10; // defining a variable that was declared previously
或者像这样:
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
发布于 2018-10-12 13:23:56
为了更好的解释,我会给你一个很长的答案。
当javascript引擎在内存中找不到特定的变量时,它将抛出一个错误。更具体地说,当javascript引擎(执行上下文)不能“引用”内存中的变量时,它将抛出ReferenceError
。这与声明错误并不完全相同,至少在javascript中是这样。
not defined
错误和值undefined
之间存在差异。
这么做吧
var a = undefined;
和
var a;
都会记录相同的结果,即undefined
。这是因为,当您简单地执行var a;
时,javascript引擎会为变量分配内存,并自动将其值设置为undefined
,这与说a
根本不存在不同-在这种情况下,它将抛出ReferenceError
。
吊装
console.log(a); // undefined
var a = 'something';
将会记录undefined
,因为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
只有一个补充说明
const a;
将在需要初始化器(定义)的地方抛出SyntaxError
。const
是唯一需要手动声明和定义的时候。
https://stackoverflow.com/questions/20822022
复制相似问题