javascript - Bagaimana untuk memahami "bahagian pernyataan gelung ialah skop induk, dan bahagian dalam badan gelung ialah skop kanak-kanak yang berasingan"?
PHPz
PHPz 2017-05-18 10:52:55
0
5
471

如题。

for (var i = 0; i < 3; i++) {
  var i = 'abc';
  console.log(i);
}
//为什么这里只输出一次 abc ? 是因为'abc'++ <3 是false吗?
for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}//为什么是3次 abc?

untuk (biar i = 0; i < 3; i++) {

console.log(i) //这里报ReferenceError: i is not define?是因为暂时性死区?
let i = 'abc';

}

PHPz
PHPz

学习是最好的投资!

membalas semua(5)
我想大声告诉你

Pertama, anda mempunyai var i di dalam for, ia berada dalam skop yang sama, kerana var ialah Skop fungsi. i = 'abc';i++, kemudian i menjadi NaN. Membandingkan NaN dengan nombor, tidak kira apa perbandingannya, adalah palsu. Jadi, keluarkan sekali sahaja. for里面var i,它们是在同一个作用域的,因为var是一个函数作用域。i = 'abc';i++,这样i就变成NaN了。NaN和数字比较,无论是什么比较,都为false。所以,只输出一次。

第二个,let是块级作用域,所以在for (let i = 0; ...)定义的i只在for的括号里有效,在块内是没有效果的,所以let i = 'abc'是相当于重新定义了一个变量,是for代码块的块级作用域的变量,只在for代码块里有效。所以执行了三次。

第三个问题,你在console.log之后定义了let i,所以i

Kedua, let ialah skop peringkat blok, jadi i ditakrifkan dalam for (let i = 0; ...) code> hanya sah dalam kurungan for dan tidak mempunyai kesan dalam blok, jadi let i = 'abc' adalah bersamaan dengan mentakrifkan semula pembolehubah, iaitu untuk blok kod hanya sah dalam blok kod for. Jadi ia dilaksanakan tiga kali. #🎜🎜# #🎜🎜#Soalan ketiga ialah anda mentakrifkan biarkan i selepas console.log, jadi i tidak wujud apabila anda memanggilnya ha. Lihat item di atas. #🎜🎜#
迷茫

Kerana pembolehubah diperbaiki

Dalam yang pertama, i luar ditukar kepada 'abc', jadi ia keluar terus, manakala dalam yang kedua, 'abc' dihadkan kepada skop peringkat blok untuk dan tidak akan berubah.

Peter_Zhu

Apabila menggunakan pengisytiharan var
for(var i=0; i<3; i++){} adalah bersamaan dengan var i;for(i=0;i<3;i++){}.
Lebih jelas jika anda melihatnya dengan cara ini
Sekeping kod pertama digelung sekali kerana:

你在内部将i赋值为字符串,无法进行++操作,for循环只运行了一次就结束了。

Pembolehubah yang diisytiharkan dengan membiarkan dalam sekeping kod kedua hanya berkuat kuasa dalam skop peringkat blok di mana ia berada Dalam kod di atas, () dan {} ialah dua skop peringkat blok satu sama lain. Definisi { i dalam } tidak akan menjejaskan i yang diisytiharkan di dalam ()

世界只因有你

var ialah skop fungsi. Dalam penghakiman gelung kedua, i = 'abc';, dan 'abc'++ &lt 3 adalah palsu, jadi gelung pertama untuk hanya dilaksanakan sekali . i = 'abc'; , 而'abc'++ < 3为false,所以第一个for循环只执行了一次。

let是块级作用域。每次for循环都重新定义了一个i,let i = 'abc'

let adalah skop peringkat blok. Setiap kali gelung for mentakrifkan semula i, skop let i = 'abc' berada dalam badan gelung dan tidak akan menjejaskan badan gelung. 🎜
曾经蜡笔没有小新

Rujukan di sini: http://www.ecma-international...

Apabila bahagian pertama bagi ialah var (VariableDeclarationList), pembolehubah yang diisytiharkan akan digabungkan ke dalam skop fungsi, sama seperti ia diisytiharkan secara berasingan.

Apabila bahagian pertama for dibiarkan, gelung akan dibahagikan kepada oldEnv dan loopEnv loopEnv boleh dianggap sebagai lapisan perantaraan yang diapit di antara badan gelung dan bahagian luar gelung, jadi ia tidak terjejas.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan