let
10647 ワード
letとvarの比較
練習する。
let a = 1
function f () {
console.log(a, b, c)//#1
let b = 2
console.log(a, b, c)//#2
if (true) {
let c = 3
console.log(a, b, c)//#3
}
console.log(a, b, c)//#4
}
f()
各コンソール.log(a,b,c)の値はいくらですか?
let a = 1
function f () {
console.log(a, b, c)//#1
let b = 2
console.log(a, b, c)//#2
if (true) {
let c = 3
console.log(a, b, c)//#3
}
console.log(a, b, c)//#4
}
f()
グローバルオブジェクトにa=1が定義されているため、aのみが出力されます.
bは、hoistingによってlet bのみが宣言され、値が定義されていないため、定義されていません.
前述したように、b=2が宣言されているため、aおよびbは出力可能である.
cまだ宣言されておらず、出力できません.
if文に入りc=3と宣言されるため、a、b、cは出力可能である.
cはifゲート内でしか使用できないので、aとbしか出力できません.
letはblock作用ドメインの影響を受ける.
letはTDGに閉じ込められている.
練習する。
var funcs = []
for (var i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i)
})
}
funcs.forEach(function (f) {
f()
})
forEachの特性
まずforeachの特性を見てみましょう
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
arr.forEach(function (element) {
console.log(element)
})
この特性と同様にelementはarrの値を関数のパラメータとして使用します.解説
では、上のコードがどのように動作しているのか、その値が何なのかを見てみましょう.
1.funcs=[]を定義します.
2.forゲートを迂回するとfuncs内に10個のfunction(){}がある.(ただし、関数の内容は実行されません.実行されたことがないので、funcsに入れます.)
3.ドアを回すと、iは10になります.
i=9の場合、for内のコンテンツが実行され、i<10が満たされるため、i=10となるが、i<10が満たされないため、for内のコンテンツは実行されない.
4.forEachが実行されるとfuncsの関数が実行されます.iはvarと宣言されているためblock scopeの影響を受けないため、i=10をコンソールとする.log(i)に適用できます.
結果:10回10回出現した.
上の質問から0から9の数字を出すにはどうすればいいですか?
var funcs = []
for (var i = 0; i < 10; i++) {
funcs.push((function (v) {
return function () {
console.log(v)
}
})(i)) //즉시실행함수
//i를 매개변수로 v로 바로 넘겨준다.
}
funcs.forEach(function (f) {
f()
})
メソッドはfuncsにfunction(v)を加え,パラメータiをパラメータとする関数を同時に実行する.funcsには10個のfunction(){console.log(i)}が含まれます.
もちろんiには0から9の数字が含まれます.
let funcs = []
for (let i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i)
})
}
funcs.forEach(function (f) {
f()
})
letを使用すると、block scopeに基づいてfor文のi値ごとにそれぞれのスキャンが実行されます.funcs.push(function () {
console.log(i)
})
すなわち,i値に基づいてこの部分を生成する.したがって、iの値は、0〜9の順に進むことができる.
結果:0~9
Reference
この問題について(let), 我々は、より多くの情報をここで見つけました https://velog.io/@minho100227/letテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol