JS中var、let和const是什么

這篇文章主要介紹了JS中var、let和const是什么,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)公司專注于洛南網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供洛南營(yíng)銷型網(wǎng)站建設(shè),洛南網(wǎng)站制作、洛南網(wǎng)頁(yè)設(shè)計(jì)、洛南網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造洛南網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供洛南網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

var

var 語(yǔ)句用來在 JavaScript 中聲明一個(gè)變量,該變量遵守以下規(guī)則:

  • 作用域范圍是函數(shù)作用域或全局作用域的。
  • 不受暫存死區(qū)(TDZ)的限制。
  • 它會(huì)在 window 上以相同的名稱創(chuàng)建一個(gè)全局屬性。
  • 可分配的。
  • 可聲明的。

函數(shù)作用域和全局作用域

當(dāng)出現(xiàn)在全局作用域內(nèi)時(shí),var 創(chuàng)建一個(gè)全局變量。另外它還會(huì)在 window 上創(chuàng)建一個(gè)具有相同名稱的 全局屬性

var city = "Florence";

console.log(window.city); // "Florence"

當(dāng)在函數(shù)內(nèi)部聲明時(shí),變量的作用域?yàn)樵摵瘮?shù):

var city = "Florence";

function bubble() {
  var city = "Siena";
  console.log(city);
}

bubble(); // "Siena"

console.log(city); // "Florence"

var 聲明會(huì)被提升:

function bubble() {
  city = "Siena";
  console.log(city);
  var city; // hoists
}

bubble(); // "Siena"

意外的全局變量

在沒有任何聲明的情況下所分配的變量(無(wú)論是 var,let 還是 const)在默認(rèn)情況下會(huì)成為全局變量

function bubble() {
  city = "Siena";
  console.log(window.city);
}

bubble(); // "Siena"

為了消除這種行為,需要使用嚴(yán)格模式

"use strict";

function bubble() {
  city = "Siena";
  console.log(window.city);
}

bubble(); // ReferenceError: assignment to undeclared variable city

可重新分配和重新聲明

任何用 var 聲明的變量都可以在以后進(jìn)行重新分配重新聲明。重新聲明的例子:

function bubble() {
  var city = "Florence";
  var city = "Siena";
  console.log(city);
}

bubble(); // "Siena"

重新分配的例子:

function bubble() {
  var city = "Siena";
  city = "Florence";
  console.log(city);
}

bubble(); // "Florence"

let

let 語(yǔ)句在 JavaScript 中聲明一個(gè)變量,該變量遵守以下規(guī)則:

  • 屬于塊作用域。
  • 受到暫存死區(qū)的約束。
  • 它不會(huì)在 window 上創(chuàng)建任何全局屬性。
  • 可分配的
  • 不可重新聲明。

塊作用域

let 聲明的變量不會(huì)在 window 上創(chuàng)建任何全局屬性:

let city = "Florence";

console.log(window.city); // undefined

當(dāng)在函數(shù)內(nèi)部聲明時(shí),變量的作用域?yàn)樵摵瘮?shù):

let city = "Florence";

function bubble() {
  let city = "Siena";
  console.log(city);
}

bubble(); // "Siena"

console.log(city); // "Florence"

當(dāng)在中聲明時(shí),變量的作用域?yàn)樵搲K。以下是在塊中使用的例子:

let city = "Florence";

{
  let city = "Siena";
  console.log(city); // "Siena";
}

console.log(city); // "Florence"

一個(gè)帶有 if 塊的例子:

let city = "Florence";

if (true) {
  let city = "Siena";
  console.log(city); // "Siena";
}

console.log(city); // "Florence"

相反,var 并不受到塊的限制:

var city = "Florence";

{
  var city = "Siena";
  console.log(city); // "Siena";
}

console.log(window.city); // "Siena"

暫存死區(qū)

let 聲明可能會(huì)被提升,但是會(huì)產(chǎn)生暫存死區(qū)

function bubble() {
  city = "Siena";
  console.log(city); // TDZ
  let city;
}

bubble();

// ReferenceError: can't access lexical declaration 'city' before initialization

暫存死區(qū)可防止在初始化之前訪問 let 聲明。另外一個(gè)例子:

function bubble() {
  console.log(city); // TDZ
  let city = "Siena";
}

bubble();

// ReferenceError: can't access lexical declaration 'city' before initialization

可以看到兩個(gè)例子中產(chǎn)生的異常都是一樣的:證明了“暫存死區(qū)”的出現(xiàn)。

可重新分配,不可重新聲明

任何用 let 聲明的變量都不能重新聲明。重新聲明引發(fā)異常的例子:

function bubble() {
  let city = "Siena";
  let city = "Florence";
  console.log(city);
}

bubble(); // SyntaxError: redeclaration of let city

這是一個(gè)有效的重新分配的例子:

function bubble() {
  let city = "Siena";
  city = "Florence";
  console.log(city);
}

bubble(); // "Florence"

const

const 語(yǔ)句用來在 JavaScript 中聲明一個(gè)變量,該變量遵守以下規(guī)則:

  • 是屬于塊作用域的。
  • 受到“暫存死區(qū)”的約束。
  • 它不會(huì)在 window 上創(chuàng)建任何全局屬性。
  • 不可重新分配
  • 不可重新聲明。

塊作用域

用 const 聲明的變量不會(huì)在 window 上創(chuàng)建任何全局屬性:

const city = "Florence";

console.log(window.city); // undefined

當(dāng)在函數(shù)內(nèi)部聲明時(shí),變量的作用域?yàn)樵摵瘮?shù):

const city = "Florence";

function bubble() {
  const city = "Siena";
  console.log(city);
}

bubble(); // "Siena"

console.log(city); // "Florence"

當(dāng)在中聲明時(shí),變量的作用域?yàn)樵搲K。塊語(yǔ)句 {} 的例子:

const city = "Florence";

{
  const city = "Siena";
  console.log(city); // "Siena";
}

console.log(city); // "Florence"

if 塊中的例子:

const city = "Florence";

if (true) {
  const city = "Siena";
  console.log(city); // "Siena";
}

console.log(city); // "Florence"

暫存死區(qū)

const 聲明可能會(huì)被提升,但是會(huì)進(jìn)入暫存死區(qū)

function bubble() {
  console.log(city);
  const city = "Siena";
}

bubble();

// ReferenceError: can't access lexical declaration 'city' before initialization

不可重新分配,不可重新聲明

const 聲明的任何變量都不能重新聲明,也不能重新分配。 一個(gè)在重新聲明時(shí)拋出異常的例子:

function bubble() {
  const city = "Siena";
  const city = "Florence";
  console.log(city);
}

bubble(); // SyntaxError: redeclaration of const city

重新分配的例子示例:

function bubble() {
  const city = "Siena";
  city = "Florence";
  console.log(city);
}

bubble(); // TypeError: invalid assignment to const 'city'

總結(jié)


塊作用域暫存死區(qū)創(chuàng)建全局屬性可重新分配可重新聲明
var?????
let?????
const?????

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享JS中var、let和const是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!

網(wǎng)頁(yè)題目:JS中var、let和const是什么
標(biāo)題網(wǎng)址:http://bm7419.com/article6/ipdeog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作服務(wù)器托管網(wǎng)站排名、定制開發(fā)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)