中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中var、let和const是什么

發布時間:2020-10-22 13:47:26 來源:億速云 閱讀:201 作者:小新 欄目:web開發

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

var

var 語句用來在 JavaScript 中聲明一個變量,該變量遵守以下規則:

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

函數作用域和全局作用域

當出現在全局作用域內時,var 創建一個全局變量。另外它還會在 window 上創建一個具有相同名稱的 全局屬性

var city = "Florence";

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

當在函數內部聲明時,變量的作用域為該函數:

var city = "Florence";

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

bubble(); // "Siena"

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

var 聲明會被提升:

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

bubble(); // "Siena"

意外的全局變量

在沒有任何聲明的情況下所分配的變量(無論是 varlet 還是 const)在默認情況下會成為全局變量

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

bubble(); // "Siena"

為了消除這種行為,需要使用嚴格模式

"use strict";

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

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

可重新分配和重新聲明

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

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 語句在 JavaScript 中聲明一個變量,該變量遵守以下規則:

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

塊作用域

let 聲明的變量不會在 window 上創建任何全局屬性:

let city = "Florence";

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

當在函數內部聲明時,變量的作用域為該函數:

let city = "Florence";

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

bubble(); // "Siena"

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

當在中聲明時,變量的作用域為該塊。以下是在塊中使用的例子:

let city = "Florence";

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

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

一個帶有 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"

暫存死區

let 聲明可能會被提升,但是會產生暫存死區

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

bubble();

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

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

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

bubble();

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

可以看到兩個例子中產生的異常都是一樣的:證明了“暫存死區”的出現。

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

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

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

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

這是一個有效的重新分配的例子:

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

bubble(); // "Florence"

const

const 語句用來在 JavaScript 中聲明一個變量,該變量遵守以下規則:

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

塊作用域

用 const 聲明的變量不會在 window 上創建任何全局屬性:

const city = "Florence";

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

當在函數內部聲明時,變量的作用域為該函數:

const city = "Florence";

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

bubble(); // "Siena"

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

當在中聲明時,變量的作用域為該塊。塊語句 {} 的例子:

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"

暫存死區

const 聲明可能會被提升,但是會進入暫存死區

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

bubble();

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

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

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

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'

總結


塊作用域暫存死區創建全局屬性可重新分配可重新聲明
var?????
let?????
const?????

感謝你能夠認真閱讀完這篇文章,希望小編分享JS中var、let和const是什么內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会泽县| 平武县| 永登县| 宜都市| 邵东县| 凤台县| 彭阳县| 仪陇县| 沛县| 彭州市| 德惠市| 阿克苏市| 成武县| 库车县| 宜城市| 沅陵县| 渭源县| 新密市| 衡南县| 义马市| 平江县| 河西区| 重庆市| 南靖县| 克东县| 阿拉善右旗| 万荣县| 金坛市| 镇康县| 新源县| 彩票| 集安市| 松溪县| 靖远县| 红安县| 永登县| 贵德县| 平顺县| 平乐县| 屏东市| 宣化县|