TIL Day-11
11日目
JavaScriptエンジンについて詳しく学びました.
一日のほとんどの時間は質問回答です.
理解がそんなに難しい.
明日CSSを勉強します.
今日習ったことはもうちょっと整理してから寝ます.
新学の品
var
を使ったものを見たことがあるかもしれません.当時,変数の使用範囲は関数単位であった.
変数の使用範囲が広い
ブロック単位の関数として使用
私の知る限りでは単独で作って使っています.
この改良された変数宣言方式
let
およびconst
.let
と異なり、var
は再宣言できません.変数にはデータが含まれます.
再宣言はできませんが、再割り当てできます.
元のデータの変数を変更できるのが特徴です.
let hello = 'world'
hello = 'good morning'
console.log(hello) // output: 'good morning'
let hello = 'hi' // output: SyntaxError
// 크롬 개발자 도구에선 개발 편의를 위해 재선언이 가능하다고 한다.
// JSbin등 다른 툴에서는 에러가 뜨는걸로 확인됐다.
const
も同様に再宣言できません.参照型データ(配列、オブジェクト、関数)を削除する変数を追加できます.
let
と異なり、再割り当ては不可能です.const array = [1, 2, 3, 4, 5]
array.pop()
console.log(array) // output: [1, 2, 3, 4]
array = [a, b, c ,d, e] // output: ReferenceError
ここで初めて理解できなかったのはconst
で変数が再割り当てできないことを知っています.
配列やオブジェクトの変更性が理解できません.
変数のデータ格納方法はこうです
変数の元のデータは、コールスタックに直接格納されます.
参照データは、
Heap
というリポジトリに格納されます.したがって、
const
で参照データを変更することができる.元のデータは変更されません.
原本の住所をコピーして変更できるからです.
const
に他の参照データのアドレスを割り当てる場合は、もちろんだめです.Bオブジェクトの要素が変更された場合
Aオブジェクトで変更されていない
深度コピーとは、AオブジェクトをコピーしたBオブジェクトのことです.
Aオブジェクトの要素が変更された場合
Bオブジェクトでの変更
浅いコピーの値は結果的に同じです.
その住所はもう一つと言える.
したがって、
const
で参照データを変更することができる.どこで発表しましたか.どこで参照できますか?に従って
変数の範囲が決まり、変数の範囲は大きく2つに分けることができます.
関数外で宣言されたグローバル変数と
関数で宣言された領域変数.
前述した
var
を関数スキャンと呼ぶ.関数内で使用できます.基本的にはグローバル変数です.
Javascript自体が拡大している間に関数の中に入っているから?
思い出せないけどそう言ってるみたい
では、私たちが使っている
let
const
は何ですか?どちらもブロックスキャン(Block Scope)です.
ブロックの使用範囲があります.
{여기서부터 여기까지}
従って,この2つは基本的に領域変数と見なすことができる.関数以外で宣言する場合...
このときモジュールの概念が生成され、定義概念はこのようになります.
関数と宣言関数の語彙環境の組合せ
うん.関数じゃないの...?そう言ってもいいですが、違うと言えば
内部関数が外部関数にアクセスできる変数を示します.
もっと簡単に言えば、そう言えます.
中から外が見えます.
外には中が見えない.
それ以外に、Closerの解釈方法がわかりません.
今日は本当に難しい概念をたくさん学びました.
よく知っていればJavaScriptドキュメントの作成に役立つことを忘れないでください.
Reference
この問題について(TIL Day-11), 我々は、より多くの情報をここで見つけました https://velog.io/@pangho/TIL-Day-11テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol