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

cak*_*akl 13 javascript

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

var x;

..并且是在此语句之后为x保留的内存?

编辑:在C extern 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
Run Code Online (Sandbox Code Playgroud)

如果ReferenceError输出会说它y is not declared会有意义.但我经常读到JS有两个非值:nullundefined.那var x将是一个有价值的定义undefined.

Der*_*yck 14

var x是一个声明,因为你没有定义它所拥有的值,但你声明它的存在和内存分配的需要.

var x = 1既是声明和定义,但与分离x宣布,而其在一开始定义正值指定(变量赋值发生在线)就行了.

我看到你已经理解了这个概念hoisting但是对于那些没有的概念,Javascript接受每个变量和函数声明并将它带到顶部(相应的范围),然后按顺序分配它们.

你似乎已经知道了大部分内容.如果您想要一些先进的,深入的探索,这是一个很好的资源.但我有一种感觉,你曾经去过那里.

Javascript花园

PS - 你在C变量dec/def和JS之间进行类比.你在维基百科上读到的内容是正确的.

  • 我的观点是,在JavaScript中,`var`声明是否实际分配任何内存取决于运行时并且几乎完全透明.它与C类似,但也有很大差异. (2认同)

ham*_*mid 10

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

var x;
Run Code Online (Sandbox Code Playgroud)

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

x = 10; // defining a variable that was declared previously
Run Code Online (Sandbox Code Playgroud)

或者像这样:

var y = 20; // declaring and defining a variable altogether.
Run Code Online (Sandbox Code Playgroud)

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


CRA*_*OLO 0

var x, y, z;

var x;

var h = 4;

i = 4;
Run Code Online (Sandbox Code Playgroud)

如果放在顶部,以上所有都是全局变量(在任何函数之外)

假设 javascript 有一个函数 start

function start() {
      x = 5*5;
}
Run Code Online (Sandbox Code Playgroud)

全局变量 x 现在等于 25

好像 var x; 没有放置在任何函数之外,该变量 x 将只是该函数的本地变量。