let、var和const的区别?如果希望const定义的对象的属性也不能被修改该怎么做?

9 篇文章 0 订阅

let、var和const的区别?如果希望const定义的对象的属性也不能被修改该怎么做?

JavaScript 有三个用于变量声明的关键字。 每个关键字都是有用的, 并且有你需要使用它的情况。 这就是为什么需要知道 JavaScript 中三个变量声明关键字之间区别的重要原因。
许多初学者在需要使用什么关键字时感到困惑。 特别是, 如果他们不了解三个关键字之间的区别。

var 关键字

JavaScript 中的关键字
var 是开发人员用于变量声明的第一个关键字。

当你使用关键字
var 在函数内声明变量时。 该变量在该函数之外无法访问, 因为在这种情况下它具有函数作用域。

下面是一个例子:

function sayHelllo() {
  var greeting = 'Hello!';
  console.log(greeting);
}

sayHelllo(); // 'Hello!'

console.log(greeting) // ReferenceError: sentence is not defined

如上所示, 当我们在函数内部调用变量 greeting 时, 我们会在调用函数时在控制台中得到响应。

但是当我们在函数外调用 greeting 时, 我们会得到一个引用错误, 因为在函数内用关键字
var 声明的变量在该函数外是不可访问的。

但是, 如果在函数外部使用关键字
var 声明变量, 它将具有全局作用域。 这意味着它可以在你的代码中的任何地方访问。

下面是一个例子:

/* This variable has a global scope, it's accessible everywhere */
var greeting = "Hello John";

function sayHelllo() {
  console.log(greeting); // "Hello John"
}
console.log(greeting); // "Hello John"

因此, 在函数外部使用关键字
var 声明的变量是全局范围的。 它们随处可见。

除此之外, 带有关键字
var 的变量是可声明和可重新分配的。 这意味着您可以重新声明相同的变量并重新分配它, 而不会出现任何问题。

下面是一个例子:

var name = 'John';
var name = 'Brad';
console.log(name) // 'Brad'

即使我们声明了相同的变量并重新分配了它, 代码仍然可以正常工作而不会出错。 但是, 这并不好, 因为有时你可以编写相同的变量, 甚至在代码中都没有注意到它们。 这也可能导致你的程序出错。

使用

var 时要记住的另一件事是, 使用关键字
var 声明的所有变量和函数都被提升到其作用域的顶部。 如果你不熟悉 JavaScript 中的提升, 我真的建议你学习它, 因为这是一个需要了解的重要概念。

关键字
let 和
const

let const

ES6 中引入了关键字
let 和
const 作为
var 的替代。 它们非常有用, 如今几乎每个 JavaScript 开发人员都在使用它们。

与关键字
var 不同, 这两个关键字具有块作用域。 这意味着当你在块中声明它们时, 它们只能在该块 {}
内访问。

下面是一个例子:

{
  const a = 5;
  let b = 6;
  var c = 8;
}
//Accessing the variables outside the block.
console.log(a); //Error: a is not defined.
console.log(b); //Error: b is not defined.
console.log(c); // 8

const 和
let 声明的变量在大括号之间的范围之外不可访问。 这就是我们得到错误的原因。 所以这非常有用, 因为有时使用关键字
var 你可以在不注意它的情况下更改变量。

另外, 请记住, 与
var 不同, 使用
let 和
const 声明的变量和函数不会被提升。 所以你不必关心吊装。

现在, 你可能想知道
let 和 cosnt 之间的区别是什么?

好吧, 用关键字
let 声明的变量是可重新分配的, 而不是可重新声明的。 虽然使用关键字
const 声明的变量不可重新分配且不可重新声明。

因此, 只需将
let 用于稍后要更改的变量, 而
const 用于你不想更改的常量变量。

下面是一个例子:

const name = "Brad";
const name = John; //Error.
let x = 1;
x = 2;
console.log(name); //"Brad"
console.log(x); // 2

差异

关键字
var:

函数作用域和全局作用域。

吊起。

可重新分配和重新申报。

关键字
let:

块范围。

没有吊起来。

可重新分配且不可重新申报。

关键字
const:

块范围。

没有吊起来。

不可重新分配且不可重新申报。

结论

正如你所看到的, 这些都是关键字之间的差异var, let以及const在JavaScript中。 就我个人而言, 我大部分时间在我的代码中使用const和let是因为它们更安全和有用。

我很少将关键字var用于全局变量, 或者如果我希望我的变量被提升。

const定义的对象的属性也不能被修改

如果const声明了一个对象,对象里面的属性是可以改变的。

const obj = {
  name: 'laona'
}
obj.name = 'lili'
console.log(obj.name) //lili

因为const声明的obj,只是保存其对象的引用地址,只要地址不变,就不会出错。

使用Object.freeze(obj)冻结obj,就能使其内部的属性不可变,但有局限,就是obj对象中要是有属性是对象,该对象内属性还能改变,要全不可变的话,就需要使用递归等方式一层一层全部冻结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值