Let wa JavaScript

ECMAScript 2015

ECMAScript 2015 inakua kichwa cha jina mbili kwa matumizi ya JavaScript:letconst.

Kichwa cha jina hizi inaofaa uwanja wa kina kirefu (Block Scope) inasikitisha (na kichwa cha jina).

Kwenye ES2015 hadi sasa, JavaScript ina ufupi wa uwanja wa kina kirefu mbili:全局作用域函数作用域.

全局作用域

Uwanja wa kina kirefuKina kirefu ina kina kirefu ina inasikitisha全局作用域.

Mifano

var carName = "porsche";
// hapa kwaandikiwa inaweza kutumika carName
function myFunction() {
  // hapa kwaandikiwa kwaandikiwa inaweza kutumika carName
}

Kufikia hapa kufanyia mifano

Uwanja wa kina kirefuInasikitisha inaweza kutumika kwenye eneo wote wa programu ya JavaScript

函数作用域

Kina kirefuKina kirefu ina kina kirefu ina inasikitisha函数作用域.

Mifano

// hapa kwaandikiwa hauweza kutumika carName
function myFunction() {
  var carName = "porsche";
  // code hapa CAN kutumika carName
}
// hapa kwaandikiwa hauweza kutumika carName

Kufikia hapa kufanyia mifano

Kina kirefuInasikitisha inaweza kutumika kwenye funiki ambayo ina inasikitisha

Uwanja wa kina kirefu wa JavaScript

kwa var Inasikitisha ya kichwa cha ujaribu kina kirefu ina uwanja wa kina kirefuUwanja.

Kina kirefu {} Inasikitisha ya kina kirefu inaweza kutumika kwenye kina kirefu kina kirefu kina kirefu

Mifano

{ 
  var x = 10; 
}
// hapa hauweza kutumika x

Kwenye ES2015 hadi sasa, JavaScript haikuhadhi uwanja wa kina kirefu

Kutumika let Kichwa cha ujaribu kina kirefu kinasababisha uwanja wa kina kirefu

Kina kirefu {} Inasikitisha ya kina kirefu hauwezi kutumika kwenye kina kirefu kina kirefu

Mifano

{ 
  let x = 10;
}
// hapa hauweza kutumika x

Kumekadiri kirefu kina kirefu

Kuwasiliana na var Kichwa cha ujaribu kirefu kina kirefu kinatoa matokeo ya matukio.

Kumekadiri kirefu kina kirefu hali ya kina kirefu kinachukua kirefu kina kirefu kina kirefu

Mifano

var x = 10;
// hapa x ni 10
{ 
  var x = 6;
  // hapa x ni 6
}
// hapa x ni 6

Kufikia hapa kufanyia mifano

Kuwasiliana na let Kichwa cha ujaribu kirefu kina kirefu kinatoa hatua hii.

Kumekadiri kirefu kina kirefu hali ya kina kirefu haikuchukua kirefu kina kirefu kina kirefu

Mifano

var x = 10;
// hapa x ni 10
{ 
  let x = 6;
  // hapa x ni 6
}
// hapa x ni 10

Kufikia hapa kufanyia mifano

Muhtasari wa vifungu wa vifungu

Internet Explorer 11 au na kuzingatia vifungu vya zamani hawana inasaa kidogo let Muhtasari.

Tafanoni hii inadefini ya kwanza inasaa let Muhtasari wa muundo wa vifungu:

Chrome 49 IE / Edge 12 Firefox 44 Safari 11 Opera 36
2016 年 3 月 2015 年 7 月 2015 年 1 月 2017 年 9 月 2016 年 3 月

循环作用域

在循环中使用 var

Mifano

var i = 7;
for (var i = 0; i < 10; i++) {
  // 一些语句
}
// 此处,i 为 10

Kufikia hapa kufanyia mifano

在循环中使用 let

Mifano

let i = 7;
for (let i = 0; i < 10; i++) {
  // 一些语句
}
// 此处 i 为 7

Kufikia hapa kufanyia mifano

在第一个例子中,在循环中使用的变量使用 var 重新声明了循环之外的变量。

在第二个例子中,在循环中使用的变量使用 let 并没有重新声明循环外的变量。

如果在循环中用 let 声明了变量 i,那么只有在循环内,变量 i 才是可见的。

函数作用域

在函数内声明变量时,使用 varlet 很相似。

它们都有函数作用域

function myFunction() {
  var carName = "porsche";   // 函数作用域
}
function myFunction() {
  let carName = "porsche";   // 函数作用域
}

全局作用域

如果在块外声明声明,那么 varlet 也很相似。

它们都拥有全局作用域

var x = 10;       // 全局作用域
let y = 6;       // 全局作用域

HTML 中的全局变量

使用 JavaScript 的情况下,全局作用域是 JavaScript 环境。

在 HTML 中,全局作用域是 window 对象。

kwa var 关键词定义的全局变量属于 window 对象:

Mifano

var carName = "porsche";
// 此处的代码可使用 window.carName

Kufikia hapa kufanyia mifano

kwa let 关键词定义的全局变量不属于 window 对象:

Mifano

let carName = "porsche";
// 此处的代码不可使用 window.carName

Kufikia hapa kufanyia mifano

重新声明

允许在程序的任何位置使用 var 重新声明 JavaScript 变量:

Mifano

var x = 10;
// 现在,x 为 10
var x = 6;
// 现在,x 为 6

Kufikia hapa kufanyia mifano

kwenye eneo la kina la hivi karibuni, au kwenye kina la hivi karibuni, kwa let Kurehasisha matokeo yenye jina kwenye var Matokeo hayana:

Mifano

var x = 10;       // wafadhali
let x = 6;       // hatarika
{
  var x = 10;   // wafadhali
  let x = 6;   // hatarika
}

kwenye eneo la kina la hivi karibuni, au kwenye kina la hivi karibuni, kwa let Kurehasisha matokeo yenye jina kwenye let Matokeo hayana:

Mifano

let x = 10;       // Inaruhusiwa
let x = 6;       // hatarika
{
  let x = 10;   // Inaruhusiwa
  let x = 6;   // hatarika
}

kwenye eneo la kina la hivi karibuni, au kwenye kina la hivi karibuni, kwa var Kurehasisha matokeo yenye jina kwenye let Matokeo hayana:

Mifano

let x = 10;       // Inaruhusiwa
var x = 6;       // Hatuna uharibifu
{
  let x = 10;   // Inaruhusiwa
  var x = 6;   // Hatuna uharibifu
}

kwenye eneo la kina la tofauti au kwenye kina la kina, kwa let Kurehasisha matokeo yenye jina hauwezi kurehasishwa:

Mifano

let x = 6;       // Inaruhusiwa
{
  let x = 7;   // Inaruhusiwa
}
{
  let x = 8;   // Inaruhusiwa
}

Kufikia hapa kufanyia mifano

Kina ya kina

kwa var Matokeo ya kina iliyofikia inaKina ya kinakwenye eneo la kina la juu. Ikiwa hatuwezi kufahamu kina ya kina (Hoisting), tafadhali nia sio chapu hili.

Tunaweza kutumia matokeo kwenye kina hadi kufikia uafikishaji:

Mifano

// Hapa, tunaweza kutumia carName
var carName;

Kufikia hapa kufanyia mifano

kwa let Matokeo ya kina iliyofikia inahifadhiwa kwenye eneo la kina la juu.

kwenye uafikishaji let kutumia matokeo kwenye kina hali yake ya kina ya kina inaweza kutokea ReferenceError.

Matokeo ya kina ya eneo la kina hauwezi kutumika hadi kufikia uafikishaji:

Mifano

// Hapa, hatuwezi kutumia carName
let carName;