let


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)の値はいくらですか?
  • #1
    グローバルオブジェクトにa=1が定義されているため、aのみが出力されます.
    bは、hoistingによってlet bのみが宣言され、値が定義されていないため、定義されていません.
  • #2
    前述したように、b=2が宣言されているため、aおよびbは出力可能である.
    cまだ宣言されておらず、出力できません.
  • #3
    if文に入りc=3と宣言されるため、a、b、cは出力可能である.
  • #4
    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