所谓的JS三大声明方式

前言:

学习的快乐不仅在于专研时的不断探索,有时候分享学习的成果又何尝不是一种快乐呢。

在前面和大家分享的JS基础中浅浅的谈到了一些三大变量声明方式,今天就和大家重点分

享一下所谓的三大变量声明方式。

三大变量声明方式:var ,let 和const关键字声明。

var

【变量声明var】

var这个声明方式现在基本上都不用它,但是我们看到了就得认识它。

【作用】
  1. 设置变量

  1. 和let非常相似

【语法】
  1. 声明变量

var food
  1. 声明变量+初始值

var noodle ='重庆小面'
  1. 重新赋值

noodle ='兰州拉面'
console.log(noodle);

运行该代码

noodle ='兰州拉面'

console.log(noodle);打印结果如下:

【注意点一:变量会提升】
console.log(num);
var num = 10;

此时其数据类型默认为underfined

运行代码打印结果如下:

【注意点二:没有块级作用域】
for(var i = 1; i<5; i++){
 console.log('循环内 + i');
}
console.log('循环内 + i');

运行该代码打印结果如下:

使用var声明全局或局部作用域的变量

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 使用var声明全局或局部作用域的变量

        // 一次声明一个变量
        var name;

        // 一次声明多个变量,不同变量之间使用逗号隔开,
        var name , gender , age

        // 在声明的同时初始化变量
        var name = 张华

        // 在声明的同时初始化全部或者部分变量
        var name ='张华',gender = '男',age

        // 使用var声明的变量,可以多次赋值,但是其结果只与最后一次赋值有关var name ="张华';
        name ='王红';
        name = 3;
        console.log(name);

    </script>
    
</body>
</html>

运行代码

name ='王红';
name = 3;
console.log(name);

打印结果如下:

let

【变量声明let】:

ES6新语法,用来声明变量。

【作用】:
  1. 声明一个块级作用域的本地变量。

  1. 可以设置初始值。

【语法】:
  1. 声明变量

let x
  1. 声明并设置初始值

let y = 10
console.log(y);

打印结果如下:

  1. 从新赋值

y ="借我一盏烛火"
console.log(y);

打印结果如下:

【注意点一:不允许重复声明】:

let不允许在相同作用域内,重复声明一个变量。

function func() {
let a = 10;
let a = 10;
}

function func() {
let a = 10;
let a = 1;
【注意点二:有块级作用域】:

它的用法类似于var,但是所声明的变量,只能在Let命令所在的代码块内有效

在下面代码块之中,分别用Let和var声明了两个变量

{
   let a = 10;
   var b = 1;
    console.log(a); //10
    /console.log(b); //1
}
console.log(a); //undefined
 console.log(b); //1
结果Let声明的变量报错,var声明的变量返回了正确的值.
这表面,let声明的变量只在它所在的代码块有效.
 console.log(a); //a is not defined
console.log(b); //1
【注意点三:不会变量提升】:

var命令会发生“变量提升”现象,即变量可以在声明之前使用,

值为underfined。这种现象多多少少是有些奇怪的,

按照一般的逻辑,变量应该在声明语句之后才可以使用。

为了纠正这种现象,et命令改变了语法行为,它声明的变量一定要在声明后使用

,否则报错.var的情况。

console.log(foo);
var foo = 2; //undefined
let的情况console.log(bar);
//Cannot access bar'before initialization(无法在初始化之前访问变量)
let bar = 2;

const

【常量声明const】:

const声明一个只读的常量。一旦声明,常量的值就不能改变。

【语法】:

声明并设置初始值

const y = 10;

【注意点一:基本数据类型无法重新赋值】:
const PI = 3.1415;
console.log(PI); //3.1415// PI = 3;
 console.log(PI); //Assignment to constant variable.(赋值给常量变量。)

打印结果如下:

【注意点二:必须设置初始值】:

const声明的变量不得改变值,这意味着,const一旦声明变量,

就必须立即初始化,不能留到以后赋值。

const foo; 
console.log(foo); //Missing initializer.(缺少初始值)// 只声明不赋值,就会报错。

打印结果如下:

【注意点三:有块级作用域】:

const的作用域和Let命令相同: 只在声明的块级作用域内有效。

if(true){
{const MAX = 5;
console.log(MAX);
}
console.log(MAX)  //MAX is not defined

打印结果如下:

【注意点四:不会变量提升】:

const命令声明的常量也是不能提升,同样存在暂时性死区,只能在声明的位置后面。

if(true){
console.log(MAX); //Cannot access 'MAX' before initializaticonst
const MAX = 5;}

【注意点五:不能重复声明】:
 let age = 18;
const age = 30;

注:

在const中,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。

但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针

const只能保证这个指针是固定的 (即总是指向另一个固定的地址)。

基本数据类型无法重新赋值

引用类型(对象、数组...),可以更改内容

不能改的是栈

 const a = [];
a.push('过过过');  //可执行
console.log(a);
console.log(a.length); //1
 a.length = 0;//可执行
 a a =['冲冲冲'] //Assignment to constant variable.(分配给常量变量。)console.log(a);
                //上面的代码中,常量a是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给a,就会报错.

打印结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快习中学乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值