JavaScript:变量定义、声明、初始化 区别与联系

先看一下定义、声明、初始化这三个东西的概念是什么:

        定义:给变量分配存储空间,并赋值

        声明:说明变量类型、名称(标识)

        初始化:声明变量时给变量赋值

首先看,定义的两种表示方法:

表示方法1:

var x = 1;

经常听到有人称这句代码为声明变量,但其实这句代码属于——完整的创建变量并赋值,且以变量名为独有标识向内存申请空间

再重新看最开始的三个概念,声明只能说明变量类型、名称,初始化是在声明时候赋值,这两个都不能向内存申请分配空间,这是定义的事儿。

所以这行代码虽然进行了变量的声明(说明变量类型Number、名称x)、初始化(x=1),但是他还向内存申请了空间,所以他是定义。

可以理解为:定义 = 声明 + 申请空间(不用+初始化,不初始化也可以实现定义,后文再说)

再看这行代码: var x = 1 

x 是他声明的变量名称,x=1 是他初始化的变量值,但是他的变量类型说明在哪里呢?

注意,JavaScript是由变量值决定变量类型,即:

向变量赋什么类型的值,则变量就是什么类型的变量,这里向变量赋值 1 ,1是number类型,所以变量x就是number类型,所以其实已经隐性的完成了变量的声明——说明变量类型+变量名称

验证如下:

var x = 1
document.write(typeof x)//结果:number

有了变量的名称,就可以通过关键字向内存申请空间,如果没有变量名称,是无法向内存申请空间的,因为你无法将这块空间与其他的空间做出区分,也就无法使用这块空间,所以变量名称又叫标识,即空间的独有标识。

JavaScript 定义变量的关键字有let、var、const,const是定义特殊的变量—常量的关键字。、

再看回这行代码,他是使用关键字 var 向内存申请空间的。

到这里,我们已经将这行代码全部解析完毕,他实现了 声明 + 申请空间 ,所以他是一条完整的变量定义语句。

表示方法2 : 

var y

这种语句的语义是:申请一块叫做y的空间。

空间y(变量y)没有进行初始化,那么他就没有自己的值 ? 不知道他的值的类型,也就不知道他的变量类型,所以他没有完成变量定义?

注意,JavaScript语言有一种基本数据类型叫做undefined,翻译作未定义。

当变量没有进行初始化的时候,系统会自动为变量赋值undefined,undefined的类型是undefined,所以未初始化的变量默认值都是undefined,默认变量类型都是undefined。

所以这行代码其实也完成了声明 + 申请空间 的定义全流程。

然后再看 声明的表示方式:

z = 3

这行代码没有关键字,所以没有向内存申请空间,他肯定不是定义,z是他的变量名称,3是他的值,3是number类型,所以变量z类型是number,说明了变量名称+变量类型,所以他首先是声明,其次他在声明过程中给变量赋值,这是初始化,那么这条语句究竟是声明还是初始化呢?

这就要看声明和初始化谁的概念更广泛了,二者是完全划等号还是一者大于另一者?

我们刚才说过:当变量没有进行初始化的时候,系统会自动为变量赋值undefined 

注意,系统自动为变量赋值undefined的过程不叫初始化,初始化必须是我们手动给变量赋的值,但是系统自动为变量赋值undefined,可以将变量类型说明为undefined,也就是说我们可以在不完成初始化的情况下实现变量赋值,进而实现变量声明,所以变量声明的范围大于变量初始化。

得出:声明 = 说明变量名称 + 说明变量类型(通过赋值:1.自动赋值2.手动赋值(初始化))

回到这行代码z=3 ,他既实现了变量初始化也实现了变量声明,但是一般我们说他是在声明变量。

弄懂初始化与赋值的区别对于常量的认识是有必要的,常量是值不可改变的变量,所以在定义常量的时候必须要给常量赋值,否则之后无法再次为常量赋值,这块空间将永远空置,而且不能由系统自动给常量赋值,系统自动赋值会给变量赋undefined,那么该常量的值将永远都是undefined,所以必须手动为常量赋值,即常量必须初始化。 

综上所述,可以笼统的说,在JavaScript中:定义>声明>初始化

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 JavaScript 中,变量提升指的是在代码执行前,变量声明就已经被提升(即复制)到了当前作用域的最顶端。这意味着,无论变量在代码中定义在哪里,它都会在代码执行前被提升到所在作用域的最顶端。 例如: ``` console.log(a); // undefined var a = 1; ``` 在这个例子中,虽然变量 `a` 实际上定义在了第二行,但是在代码执行前,它已经被提升到了最顶端。所以在第一行中,当我们尝试访问 `a` 时,它已经被声明过了,所以输出 `undefined`。 注意,变量提升仅仅是声明(复制)被提升,而不是赋值。所以在上面的例子中,变量 `a` 的值在第二行被赋值为 1,而不是在第一行被赋值为 `undefined`。 ### 回答2: JavaScript变量提升是JavaScript中的一种特性。在JavaScript中,变量声明会在代码执行之前进行处理,也就是说它们会被“提升”到其作用域的顶部。这意味着你可以在声明之前使用变量,而不会引发错误。 例如,假设我们有以下的JavaScript代码: ``` console.log(x); // undefined var x = 5; console.log(x); // 5 ``` 在这个例子中,变量x被提升到了代码的顶部,所以在第一个console.log语句中,x被声明了但尚未被赋值,所以它的值是undefined。然后,变量x被赋值为5,并在第二个console.log语句中打印出来。 需要注意的是,只有变量声明会被提升,而不是它们的赋值。例如: ``` console.log(y); // ReferenceError: y is not defined y = 10; console.log(y); // 10 var y; ``` 在这个例子中,变量y在它的声明之前被使用会引发错误。只有在变量y的声明后,它的赋值才会生效。 变量提升在理解JavaScript的作用域和执行顺序时非常重要。它使得我们可以在变量声明之前使用变量,但也可能导致一些意外的结果,所以在编写代码时要小心使用。 ### 回答3: JavaScript变量提升是指在代码执行之前,所有变量声明都会被提升到代码的顶部。这意味着我们可以在变量声明之前使用这些变量。但是要记住的是,只有变量声明会被提升,而不是初始化。 例如,我们可以在变量声明之前输出变量的值: console.log(x); // undefined var x = 5; 这段代码中,变量x在声明之前被赋值为undefined,因此在打印x时,它的值是undefined。 变量提升还可以应用于函数声明。我们可以在函数声明之前调用函数: myFunction(); // "Hello, World!" function myFunction() { console.log("Hello, World!"); } 在这个例子中,函数myFunction在声明之前被调用,所以我们可以在调用函数之前定义它。 需要注意的是,变量提升仅适用于使用var关键字声明变量,而不适用于使用let和const关键字声明变量。使用let和const声明变量是块级作用域的,不会被提升。 综上所述,JavaScript变量提升是一种将变量声明提升到代码顶部的机制,使我们可以在变量声明之前使用这些变量。这在代码书写和阅读上提供了一定的便利,但也需要注意一些细节,以避免出现意料之外的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值