Rumah > Soal Jawab > teks badan
如题。
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';
}
我想大声告诉你2017-05-18 10:54:55
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 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
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 < Block Pembolehubah peringkat kod>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. #🎜🎜#迷茫2017-05-18 10:54:55
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.
天蓬老师2017-05-18 10:54:55
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 ()
世界只因有你2017-05-18 10:54:55
var ialah skop fungsi. Dalam penghakiman gelung kedua, i = 'abc';
, dan 'abc'++ < 3
adalah palsu, jadi gelung pertama untuk hanya dilaksanakan sekali . i = 'abc';
, 而'abc'++ < 3
为false,所以第一个for循环只执行了一次。
let是块级作用域。每次for循环都重新定义了一个i,let i = 'abc'
let i = 'abc'
berada dalam badan gelung dan tidak akan menjejaskan badan gelung. 🎜曾经蜡笔没有小新2017-05-18 10:54:55
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.