您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页【javascript从零单排】变量let、var、const

【javascript从零单排】变量let、var、const

来源:意榕旅游网

🌈"It always seems impossible until it’s done." — Nelson Mandela
种一棵树最好是机会是十年前,其次是现在。

📗概念

声明变量

在 JavaScript 中,可以使用三种关键字来声明变量:var、let 和 const。

1️⃣var:

作用域是函数作用域或全局作用域。
可以被重新声明和更新。
在声明之前可以被访问(提升)。

var name = 'John';
console.log(name); // 输出: John

2️⃣let:

作用域是块级作用域。
不能被重新声明,但可以更新。
在声明之前不能被访问(无提升)。

let age = 30;
age = 31; // 更新值
console.log(age); // 输出: 31

3️⃣ const:

作用域是块级作用域。
不能被重新声明或更新(常量)。
必须在声明时初始化。

const pi = 3.14;
// pi = 3.14159; // 会报错
console.log(pi); // 输出: 3.14

作用域

函数作用域:

是指在函数内部声明的变量只能在该函数内部访问。函数外部无法访问这些变量。

使用 var 声明的变量是函数作用域的。

function myFunction() {
    var x = 10; // x 是函数作用域
    console.log(x); // 输出: 10
}

myFunction();
console.log(x); // 报错: Uncaught ReferenceError: x is not defined

特点:

  • 变量在函数内部声明后,只能在该函数内访问。
  • 函数执行后,函数内部的局部变量会被销毁。

块作用域

块作用域是指在 {} 代码块(例如 if 语句、for 循环等)内部声明的变量只能在该代码块内部访问。

使用 let 和 const 声明的变量是块作用域的。

if (true) {
    let y = 20; // y 是块作用域
    console.log(y); // 输出: 20
}

console.log(y); // 报错: Uncaught ReferenceError: y is not defined

特点:

  • 变量在块内部声明后,只能在该块内访问。
  • 块作用域可以嵌套,外部块可以访问内部块的变量,但内部块无法访问外部块的变量。

作用域链

当访问一个变量时,JavaScript 会从当前作用域开始查找,直到找到该变量或到达全局作用域为止。这种查找机制称为作用域链。

变量类型

JavaScript 中的变量可以存储多种类型的数据,包括:

基本类型:

1️⃣ 字符串(String):文本数据。

let greeting = "Hello, World!";
2️⃣ 数字(Number):整数或浮点数。

let score = 95;

3️⃣ 布尔值(Boolean):真或假。

let isActive = true;
4️⃣ 未定义(Undefined):未赋值的变量。

let value;
console.log(value); // 输出: undefined
5️⃣空值(Null):表示“无”或“空”。

let obj = null;

引用类型:

1️⃣ 对象(Object):键值对集合,可以嵌套。

let person = {
    name: 'Alice',
    age: 25
};

2️⃣数组(Array):有序的数据集合,可以嵌套。

let fruits = ['apple', 'banana', 'orange'];

💻代码

//基本类型
var greeting = 'hello';//string类型
const MyAge = 29;//number类型
const Price = 100.2//number类型
let isOldEnoughToParty = true;//boolean类型
console.log(Price); //=> 100.2
console.log(greeting); // => 'hello'
console.log(MyAge); // => 29
console.log(isOldEnoughToParty); // true


//var声明的变量的作用域是函数内部
var x = 'oh dang';

function MyFunction() {
  var x = 10;
  var x = 1;
  var x = false;
  console.log(x);
}
MyFunction();
console.log(x);
//输出
// false
// oh dang


//let块级作用域,只在{}块内生效
let array = [101,'name','age'];
for(let i = 0; i < array.length; i++) {
    // Loop!
  }
  
  console.log(i); // => undefined

//var 函数级作用域,不推荐这样写
for(var i = 0; i < array.length; i++) {
    // Loop!
  }
  
  console.log(i); // => undefined

//不能重复定义
let first = 10;
first  += 5;
const first = 20; // => Exception: Identifier 'first' has already been declared

//let对比const
//let可以重新分配,但const不能。

let first1 = 10;
first1 = 20; // => OK
const second = 1000;
second = 2000; // => Exception: Cannot reassign 'const' value

//const声明的数组是可变的
//尽管 myArray 是用 const 声明的,但它的内容(元素)是可以改变的。const 仅保证变量的引用不变,而不是数组的内容。
const myArray = ['raining', 'cats', 'and', 'dogs'];
myArray.pop();//pop() 是数组的一个内置方法,它用于移除数组的最后一个元素,并返回该元素
console.log(myArray); // => [ 'raining', 'cats', 'and' ]
//const 声明的 myArray 数组可以修改其内容,但不能重新赋值。

💡 Tips

  • 除非需要函数范围,否则不要使用 var。
  • const声明的常量如果是基本类型,则不可改变,如果是引用类型,则可以改变其中的某个值,但是不可以重新赋值。

💪Dream it. Wish it. Do it.
有梦不难,跟着我去闯。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务