变量
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:给常量赋值