什么';JavaScript中变量定义和声明的区别是什么?
这是变量定义还是声明?为什么什么';JavaScript中变量定义和声明的区别是什么?,javascript,Javascript,这是变量定义还是声明?为什么 varx ..在该语句之后是否为x保留了内存 编辑: 在C外部intx是一个声明,intx=5是一个定义。JS中的模拟是什么?维基百科说,一个声明分配内存,这个定义为分配的内存分配一个值 第二次编辑: 我认为@Deryck的解释听起来不错,但有一些输出与他的解释不一致: > var x; undefined > x undefined // now it looks like x is defined to the value undefined >
varx代码>
..在该语句之后是否为x保留了内存
编辑:
在C外部intx
是一个声明,intx=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未声明
,这是有意义的。但我经常读到JS有两个非值:null
和undefined
。因此,var x
将是一个值为undefined
的定义
var x, y, z;
var x;
var h = 4;
i = 4;
如果位于顶部,则上述所有变量都是全局变量(在任何函数之外)
假设javascript有一个函数start
function start() {
x = 5*5;
}
全局变量x现在等于25
其中,假设var x;未放置在任何函数之外,该变量x将只是该函数的局部变量。您使用var关键字声明JavaScript变量:
var carname代码>
声明之后,变量为空(没有值)
要为变量赋值,请使用等号
var carname=“沃尔沃”代码>
在计算机程序中,变量的声明通常没有值。该值可以是必须计算的值,也可以是稍后提供的值,如用户输入。未声明值的变量将具有未定义的值
执行以下语句后,变量carname将具有未定义的值:
var carname代码>
无功提升
在JavaScript中,变量可以在使用后声明
bla = 2
var bla;
// ...
// is implicitly understood as:
var bla;
bla = 2;
因此,建议始终在函数顶部声明变量。否则,可能会导致混淆情况
在声明变量而不为其赋值时,仍然需要一些可用内存,否则您无法在程序中稍后引用该变量。我不认为这是一个值得注意的内存使用量,也不会产生任何影响。
声明一个变量就像告诉(javascript)编译器这个标记x
是我想在以后使用的东西。它确实指向内存中的一个位置,但它还不包含值。即,它是未定义的
var x;
> var x;
undefined
> x
undefined // now it looks like x is defined to the value undefined
> y
ReferenceError: y is not defined
定义它意味着给它一个值,你可以这样做:
x = 10; // defining a variable that was declared previously
或者像这样:
var y = 20; // declaring and defining a variable altogether.
var x
是一个声明,因为您没有定义它持有的值,而是声明它的存在和内存分配的需要
var x=1
既是声明又是定义,但在开始时用x
被声明分隔,而其定义位于指定行(变量赋值发生内联)
我知道你已经理解了提升的概念,但是对于那些不理解的人来说,Javascript会把每个变量和函数声明都带到顶部(对应的范围),然后依次分配它们
不过,你似乎已经知道了其中的大部分。如果你想进行一些高级、深入的探索,这里有一个很好的资源。但我觉得你以前去过那里
PS—您对C变量dec/def和JS的类比非常准确。你在维基百科上读到的是正确的。为了更好的解释,我会给你一个很长的答案
当javascript引擎无法在内存中找到特定变量时,它将抛出一个错误。更具体地说,当javascript引擎(执行上下文)无法“引用”内存中的变量时,它将抛出一个引用错误
。这与声明错误不完全相同,至少在javascript中是这样
未定义
错误与值未定义
之间存在差异
这样做
var a = undefined;
及
两者都将记录相同的结果,即未定义
。这是因为,当你简单地做一个var a代码>javascript引擎为变量分配内存,并自动将其值设置为未定义的
,这不同于说a
根本不存在-在这种情况下,它将抛出一个引用错误
吊起
将记录未定义的
,因为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
<代码>常量
是唯一需要手动声明和定义的时间
var x;
这是一个变量声明。在Js中,若在声明中并没有为变量赋值。默认情况下,它将获得未定义的
var x; // declaring x
console.log(x); // output: undefined
但是,如果您甚至还没有在中声明变量,您可以尝试访问它。它表示变量未定义
console.log(y); // Output: ReferenceError: y is not defined
如果需要访问JS文件之间的对象,最好将一个对象公开到全局名称空间,并在该对象上声明字段和方法
文件1:
var myObject;
myObject.myField = "Field!";
文件2:
myObject.prototype.myFunction = function () {
return this.myField;
};
我已经从一个
myObject.prototype.myFunction = function () {
return this.myField;
};
> var x;
undefined
> x
undefined // now it looks like x is defined to the value undefined
> y
ReferenceError: y is not defined