Jadual Kandungan
Dua pengisytiharan fungsi di atas adalah menyalahi undang-undang mengikut peruntukan . " > menetapkan bahawa fungsi hanya boleh berada dalam skop dan fungsi peringkat atas skop Diisytiharkan masuk, tidak boleh diisytiharkan dalam skop peringkat blok. Dua pengisytiharan fungsi di atas adalah menyalahi undang-undang mengikut peruntukan .
Rumah hujung hadapan web Soal Jawab bahagian hadapan Adakah pembolehubah dibalut dalam es6 jika dikira sebagai di dalam blok?

Adakah pembolehubah dibalut dalam es6 jika dikira sebagai di dalam blok?

Nov 21, 2022 pm 04:21 PM
javascript es6

es6 dalam blok pengiraan berubah yang dibalut dengan if. Terdapat skop peringkat blok baharu dalam es6 Kod yang dibalut oleh "{ }" ialah skop peringkat blok "{}", jika penyataan, dan kod dalam gelung for dalam fungsi semuanya tergolong dalam blok-; skop tahap dan dikira dalam blok. Dalam ES6, skop peringkat blok dibenarkan untuk bersarang sewenang-wenangnya Skop luar tidak boleh membaca pembolehubah skop dalam boleh menentukan pembolehubah dengan nama skop luar yang sama.

Adakah pembolehubah dibalut dalam es6 jika dikira sebagai di dalam blok?

Persekitaran pengendalian tutorial ini: sistem Windows 7, ECMAScript versi 6, komputer Dell G3.

Apakah itu skop peringkat blok? Skop blok dibalut dengan , dan

pernyataan dan

di dalam ES6 pernyataan juga tergolong dalam skop blok. { }if{}, pernyataan if dan untuk gelung dalam fungsi juga tergolong dalam skop peringkat blok Pembolehubah yang ditakrifkan oleh let dan const hanya boleh sah dalam skop. for{ }

Mengapa skop peringkat blok diperlukan

Senario pertama: pembolehubah dalaman akan menimpa pembolehubah luaran

Senario kedua: Pembolehubah gelung yang digunakan untuk mengira kebocoran ke dalam pembolehubah global

var time = new Date()
function fx () {
    console.log(time) // undefined
    if (false) {
        var time = 'hello'
    }
}
fx()
Salin selepas log masuk
{
    var a = 1
    console.log(a) // 1
}
console.log(a) // 1
// 通过var定义的变量可以跨块作用域访问到。
Salin selepas log masuk
Pembolehubah yang ditakrifkan dengan

dalam gelung boleh diakses dalam skop luaran

for dalam pernyataan 🎜>var boleh diakses dalam skop luaran Perbezaan antara

for (var i = 0; i < 3; i++) {

}

for (let j = 0; j < 3; j++) {

}
// 3
console.log(i);
// Uncaught ReferenceError: j is not defined
console.log(j);
Salin selepas log masuk

if dan var ialah

<.>

akan dilaksanakan, jadi if(true) dicetak sebagai if (false)

    Pernyataan tugasan dalam
  • tidak akan dilaksanakan, tetapi pembolehubah yang diisytiharkan if(true) akan dinaikkan pangkat kerana promosi pembolehubah Dinaikkan pangkat ke peringkat teratas skop, jadi ia dicetak sebagai a3
  • if(false)var bundefinedSkop peringkat blok (ES6 menyediakan pembolehubah let & const untuk melaksanakan skop skop peringkat blok)
if (true) {
	var a = 3
}

if (false) {
	var b = 3
}
// 3
console.log(a);
// undefined
console.log(b);

if (true) {
	let c = 3
}
// Uncaught ReferenceError: c is not defined
console.log(c);
Salin selepas log masuk

ES6 membenarkan sarang sewenang-wenangnya skop peringkat blok. Kod di atas menggunakan skop peringkat blok lima peringkat dan setiap tahap ialah skop yang berasingan. Skop peringkat keempat tidak boleh membaca pembolehubah dalaman skop peringkat kelima.

function fxFn () { // 这是一个块级作用域
    let fx = 'fx is a great girl'
    if (true) { // 这是一个块级作用域
        let fx = 'fx is 18 years old'
    }
    console.log(fx) // fx is a great girl
}
fxFn()
 
// 块级作用域之间相互不影响
Salin selepas log masuk
Skop dalaman boleh menentukan pembolehubah dengan nama yang sama dalam skop luar.

{{{{
  {
    let fnn = 'Hello'
  }
  console.log(fnn); // 报错
}}}};
Salin selepas log masuk

Kemunculan skop peringkat blok sebenarnya menjadikan ungkapan fungsi yang dilaksanakan segera tanpa nama yang digunakan secara meluas (tanpa nama

) tidak lagi diperlukan.
{{{{
  let fnn = 'Hello';
  {
    let fnn = 'Hello'
  }
}}}};
Salin selepas log masuk

Skop peringkat blok dan pengisytiharan fungsiIIFE

// IIFE 写法
(function () {
  var tmp = '...';
  // ...
}());
 
// 块级作用域写法
{
  let tmp = '...';
  // ...
}
Salin selepas log masuk

menetapkan bahawa fungsi hanya boleh berada dalam skop dan fungsi peringkat atas skop Diisytiharkan masuk, tidak boleh diisytiharkan dalam skop peringkat blok. Dua pengisytiharan fungsi di atas adalah menyalahi undang-undang mengikut peruntukan .

Walau bagaimanapun, penyemak imbas tidak mematuhi keperluan ini Untuk serasi dengan kod lama, mereka masih menyokong fungsi pengisytiharan dalam skop peringkat blok, jadi kedua-dua situasi di atas sebenarnya boleh dijalankan tanpa melaporkan ralat. ES5

// 情况一
if (true) {
  function f() {}
}
 
// 情况二
try {
  function f() {}
} catch(e) {
  // ...
}
Salin selepas log masuk
memperkenalkan skop blok, secara eksplisit membenarkan fungsi diisytiharkan dalam skop blok.

menyatakan bahawa dalam skop peringkat blok, pernyataan pengisytiharan fungsi berkelakuan seperti ES5 dan tidak boleh dirujuk di luar skop peringkat blok.

Apabila kod di atas dijalankan dalam

, anda akan mendapat "ES6", kerana fungsi ES6 yang diisytiharkan dalam let akan dinaikkan pangkat ke kepala fungsi, dan kod larian sebenar seperti berikut.

function f() { console.log('I am outside!'); }
 
(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }
 
  f();
}());
Salin selepas log masuk

ES5 secara teorinya, anda akan mendapat "I am inside!". Oleh kerana fungsi yang diisytiharkan dalam skop peringkat blok adalah serupa dengan if, ia tidak mempunyai kesan di luar skop. f Walau bagaimanapun, jika anda benar-benar menjalankan kod di atas dalam

penyemak imbas, ralat akan dilaporkan. Mengapa ini?
// ES5 环境
function f() { console.log('I am outside!'); }
 
(function () {
  function f() { console.log('I am inside!'); }
  if (false) {
  }
  f();
}());
Salin selepas log masuk

ES6Kod di atas akan melaporkan ralat dalam penyemak imbas I am outside!. let
Ternyata jika peraturan pemprosesan untuk fungsi yang diisytiharkan dalam skop peringkat blok ditukar, ia jelas akan memberi kesan yang besar pada kod lama. Untuk mengurangkan masalah ketidakserasian yang terhasil, ES6 menetapkan bahawa pelaksanaan penyemak imbas tidak boleh mematuhi peraturan di atas dan mempunyai tingkah laku mereka sendiri ES6

// 浏览器的 ES6 环境
function f() { console.log('I am outside!'); }
 
(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }
 
  f();
}());
// Uncaught TypeError: f is not a function
Salin selepas log masuk
yang membolehkan fungsi diisytiharkan dalam skop peringkat blok.

ES6Pengisytiharan fungsi adalah serupa dengan

, iaitu, ia akan dinaikkan pangkat kepada ketua skop global atau skop fungsi.

Pada masa yang sama, pengisytiharan fungsi juga akan dinaikkan pangkat kepada ketua skop peringkat blok di mana ia berada.
  • Perhatikan bahawa tiga peraturan di atas hanya sah untuk pelaksanaan penyemak imbas
  • Pelaksanaan dalam persekitaran lain tidak perlu mematuhi pengisytiharan fungsi peringkat blok masih dianggap sebagai var.
  • Menurut tiga peraturan ini, dalam persekitaran
  • penyemak imbas, fungsi yang diisytiharkan dalam skop peringkat blok berkelakuan serupa dengan pembolehubah yang diisytiharkan dalam
. Kod yang sebenarnya berjalan dalam contoh di atas adalah seperti berikut.

ES6letMemandangkan tingkah laku berbeza-beza disebabkan oleh persekitaran, pengisytiharan fungsi dalam skop peringkat blok harus dielakkan. Jika ia benar-benar perlu, ia harus ditulis sebagai ungkapan fungsi dan bukannya pernyataan pengisytiharan fungsi.

// 块级作用域内部的函数声明语句,建议不要使用
{
  let a = 'secret';
  function f() {
    return a;
  }
}
 
// 块级作用域内部,优先使用函数表达式
{
  let a = 'secret';
  let f = function () {
    return a;
  };
}
Salin selepas log masuk

ES6 的块级作用域必须有大括号

如果没有大括号,JavaScript 引擎就认为不存在块级作用域。

// 第一种写法,报错
if (true) let x = 1;
 
// 第二种写法,不报错
if (true) {
  let x = 1;
}
Salin selepas log masuk

上面代码中,第一种写法没有大括号,所以不存在块级作用域,而let只能出现在当前作用域的顶层,所以报错。第二种写法有大括号,所以块级作用域成立。

函数声明也是如此,严格模式下,函数只能声明在当前作用域的顶层。

// 不报错
'use strict';
if (true) {
  function f() {}
}
 
// 报错
'use strict';
if (true)
  function f() {}
Salin selepas log masuk

【推荐学习:javascript视频教程

Atas ialah kandungan terperinci Adakah pembolehubah dibalut dalam es6 jika dikira sebagai di dalam blok?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Bagaimana untuk menggunakan insertBefore dalam javascript Bagaimana untuk menggunakan insertBefore dalam javascript Nov 24, 2023 am 11:56 AM

Penggunaan: Dalam JavaScript, kaedah insertBefore() digunakan untuk memasukkan nod baharu dalam pepohon DOM. Kaedah ini memerlukan dua parameter: nod baharu untuk dimasukkan dan nod rujukan (iaitu nod di mana nod baharu akan dimasukkan).

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap JavaScript dan WebSocket: Membina sistem pemprosesan imej masa nyata yang cekap Dec 17, 2023 am 08:41 AM

JavaScript ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web, manakala WebSocket ialah protokol rangkaian yang digunakan untuk komunikasi masa nyata. Menggabungkan fungsi berkuasa kedua-duanya, kami boleh mencipta sistem pemprosesan imej masa nyata yang cekap. Artikel ini akan memperkenalkan cara untuk melaksanakan sistem ini menggunakan JavaScript dan WebSocket, dan memberikan contoh kod khusus. Pertama, kita perlu menjelaskan keperluan dan matlamat sistem pemprosesan imej masa nyata. Katakan kita mempunyai peranti kamera yang boleh mengumpul data imej masa nyata

See all articles