这是变量定义还是声明?为什么?
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有两个非值:null和undefined.那var x将是一个有价值的定义undefined.
Der*_*yck 14
var x是一个声明,因为你没有定义它所拥有的值,但你声明它的存在和内存分配的需要.
var x = 1既是声明和定义,但与分离x被宣布,而其在一开始定义正值指定(变量赋值发生在线)就行了.
我看到你已经理解了这个概念hoisting但是对于那些没有的概念,Javascript接受每个变量和函数声明并将它带到顶部(相应的范围),然后按顺序分配它们.
你似乎已经知道了大部分内容.如果您想要一些先进的,深入的探索,这是一个很好的资源.但我有一种感觉,你曾经去过那里.
PS - 你在C变量dec/def和JS之间进行类比.你在维基百科上读到的内容是正确的.
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
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 将只是该函数的本地变量。