《Javascript高级程序设计》第三章学习---变量

本文详细介绍了JavaScript中的变量声明,包括var、let和const的关键区别。var变量存在变量提升和作用域问题,let和const则引入了块级作用域,其中const声明不可变值。此外,还探讨了变量命名规范,以及在不同场景下如何选择使用这些声明方式。
摘要由CSDN通过智能技术生成

变量

1. 什么是变量:简单来说就是在内存中开辟一块空间来存储数据

2. 变量声明的方法:利用 var、let 和 const 关键字

3. 使用变量的方法:① 声明变量;② 赋值

4.  声明变量的几种情况:

①只声明不赋值---> undefined

②不声明不赋值直接使用某个变量---> 报错

③不声明直接赋值---> eg: qq = 123;(合法,但不推荐)

5. 变量名的命名规范:

① 命名时尽量避免关键字与保留字

② 命名时大写与小写是不一样的:

        eg: typeof是个关键字,但Typeof 就可以是个变量名

③ 命名时可以包含 _ $ 这样的特殊字符

④ 由多个单词组成的名称要使用驼峰命名法

6. var 关键字

1)变量的初始化: var age = 18;

声明一个变量并赋值就叫做变量的初始化

2)同时声明多个变量:

var a = 1, b = 2, c = 3;

// 等价于

var a = 1;
var b = 2;
var c = 3;

//*****************

var a, b, c = 1;

// 等价于

var a;
var b;
var c = 1;

3)变量的作用域:

① 全局变量:全局作用域下的变量在整个页面中都可以使用

② 局部变量:在局部作用域下的变量,只能在其所在的函数内部使用

function test(){
    var a = 1;
};
test();
console.log(a); //报错

特殊情况:
在函数内部出现 “未声明直接赋值”的变量时(eg: num = 29),该变量是属于全局的,即在函数外是可以调用的;函数的形参也可以看作局部变量

4)全局变量与局部变量的比较

① 全局变量在浏览器关闭时才会销毁

② 局部变量在当我们的程序执行完毕时就会销毁

5)变量提升

使用var声明额变量会自动提升到其所在作用域的顶部

6)用var声明的变量在重新赋值后,它原有的值就会被覆盖,变量将以最后一次赋的值为准

7)交换两个变量的值(临时变量)

<script>
    var a= apple;
    var b = banana;
    var temp; //声明一个临时变量
    temp = a;
    a = b;
    b = temp;
    console.log(a); // banana
    console.log(b); // apple
</script>

7. let 声明:利用let声明变量,所用声明的变量只在let命令所在的代码块中有效

let a = 1;
{
    let a = 2;
}
console.log(a); // a = 1

1)let 不允许在同一代码块中出现冗余声明

let a = 4;
let a = 1; // SyntaxError; 标识符a已经被声明过了

注意:let 声明的变量只在其所在的代码块中有效,所以冗余不冗余的也要先看变量是否处于同一代码块中

2)let声明的变量没有变量提升

     所以在let 声明之前被执行的瞬间叫做"暂时性死区" 

3)使用 let 在全局作用域中声明的变量不会成为 window 对象的属性, 其变量会在页面的生命周期内续存

var name = 'Matt';
console.log(window.name); // 'Matt'

let age = 666;
console.log(window.age); // undefined 

8. const 声明:const 的行为与 let 基本相同,唯一一个重要区别是:在使用const 声明变量的同时必须要初始化变量,且在尝试修改const声明的变量会导致运行错误

 <script>
   // 不可以修改const 声明后的变量
   const age = 35;
   age = 66;
   console.log(age);  // Uncaught TypeError: 给常值赋值

   // 不可以重复声明
   const name = 'Matt';
   const name = 'Helen'; // SyntaxError

   // const 的作用域也是块
   const name = 'Matt';
   if (true) {
      const name = 'Helen';
   }
   console.log(name);  // 'Matt'
</script>

如果const声明是一个对象,那么可以修改这个对象内部的属性

8. var、 let 和 const 的区别:

1)var 与 let 的区别一:let 声明的范围是块级作用域; var 声明的范围有全局变量和局部变量之分

2)var 与 let 的区别二:var 有变量提升;let 声明的变量不会在作用域中被提升

3)var 与let 的区别三:使用let 在全局作用域中声明的变量不会成为window对象的属性;使用 var 在全局作用域中声明的变量会成为window'对象的属性

4)for 循环中的var、 let 与 const 声明:

// 在 var 声明中,for 循环定义的迭代变量会渗透到循环体外部
for (var i = 0; i < 5; i++) {
    //循环逻辑
}
console.log(i);  // i = 5
// 在let 声明中,for 循环定义的迭代变量的作用域仅限于for循环的内部
or (let i = 0; i < 5; i++) {
   //循环逻辑
}
console.log(i);  // ReferenceError: i没有定义
//  不能用 const 来声明迭代变量(因为迭代会自增,而const中不能修改const声明的变量
for (const i = 0; i < 5; i++) {
     //循环逻辑
 }
console.log(i); // TypeError:给常量赋值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

QianjuQ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值