1.var 声明的变量作用域为函数级别作用域,如果在函数外部声明,它将作为全局变量。但是大括号“{}” 却限定不了var的作用域,因此用var声明的变量具有变量提升的效果,它不支持块级作用域。(挂载到window对象)
function example() {
var a = 10;
if (true) {
var b = 20;
console.log(a); // 输出 10
}
console.log(b); // 输出 20
}
example();
2.使用 let 关键字声明块级作用域变量
let 声明的变量作用域为块级作用域。在同一作用域内,不能声明同名的 let 变量。
function example() {
let a = 10;
if (true) {
let b = 20;
console.log(a); // 输出 10
}
console.log(b); // 报错,b未定义
}
example();
3.使用 const 关键字声明常量
const 声明的变量作用域为块级作用域,一旦声明,它的值不能被修改。在同一作用域内,不能声明同名的 const 变量。(指向一个固定的地址)使用const声明对象时小心,不能修改指向,但是可以添加属性
const PI = 3.14;
PI = 3; // 报错,常量不能被修改
const f = {}
f.add("aaa") //true
f = {"111"} //false
4.用关键字import声明变量,import用于加载文件,在大括号接收的是一个或多个变量名,这些变量名需要与你想要导入的变量名相同。
import myModule from './myModule.js';//myMoudle 是一个变量
- 使用 function 声明函数(函数和var比较像
function add(a) {
var sum = a + 1;
return sum;
}
6.用关键字class声明变量
// 使用 class 声明类
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}
const john = new Person('John', 25);
john.sayHello(); // 输出 'Hello, my name is John and I'm 25 years old.'