let
, const
let
let a = 1
function f () {
console.log(a, b, c)
a는 내부 블록스코프에서 선언한게 없기 때문에 상위에서 찾아가고
그다음에 b가 나오므로 이거는 레퍼런스 에러 뜸
c또한 없으므로 레퍼런스 에러
let b = 2
console.log(a, b, c)
a는 1이 나오고 전역 변수 선언
b 같은 경우 블록스코프 내분에 있으므로 2
if (true) {
let c = 3
console.log(a, b, c)
123
}
console.log(a, b, c)
123
}
f()
for (let i = 0; i < 5; i++) {
console.log(i)
}
console.log(i)
let a = 1
a = 2
console.log(a)
var funcs = []
// 배열 생성
for (var i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i)
})
}
포문이 전부다 돌고 나서
funcs.forEach(function (f) {
f()
})
포이치가 돌게됨ㅈ
// 무슨 값이 나올까?
10일 10번나옴
var funcs = []
for (var i = 0; i < 10; i++) {
funcs.push((function (v) {
return function () {
console.log(v)
}
})(i))
}
funcs.forEach(function (f) {
f()
})
let funcs = []
for (let i = 0; i < 10; i++) {
funcs.push(function () {
console.log(i)
})
}
funcs.forEach(function (f) {
f()
})
var가 아닌 let인 경우 블록 스코프가 생성되서 즉시실행함수를 굳이? 알아볼 필요가 없음
const
constant varialbe 상수 변수라고 하는데 이게 뭘까?
const PI = 3.141593
PI = 3.14
const PI
PI = 3.14
obj한테 객체를 할당 했는데?
const OBJ = {
prop1 : 1,
prop2 : 2
}
OBJ.prop1 = 3
console.log(OBJ.prop1)
const ARR = [0, 1, 2]
ARR.push(3)
delete ARR[1]
console.log(ARR)
해결방안:
Object.freeze()
,Object.defineProperty()
const OBJ = {}
Object.defineProperty(OBJ, 'prop1', {
value : 1,
writable: false,
configurable: false
})
const OBJ2 = {
prop1 : 1
}
Object.freeze(OBJ2)
여전히 남는 문제점: nested Object의 경우...
const OBJ = {
prop1 : 1,
prop2 : [2, 3, 4],
prop3 : { a: 1, b: 2 }
}
Object.freeze(OBJ)
OBJ.prop1 = 3
OBJ.prop2.push(5)
OBJ.prop3.b = 3
console.log(OBJ)
Object.freeze(OBJ.prop2)
OBJ.prop2.push(6)
console.log(OBJ)
var obj = {
prop1: 1,
prop2: 2,
prop3: 3
}
for (const prop in obj) {
console.log(prop)
}
for (const i = 0; i < 5; i++) {
console.log(i)
}
{
let a = 10
{
const b = 20
console.log(b)
}
console.log(a)
console.log(b)
}
console.log(a)
var a = 0
var a = 1
console.log(a)
let b = 2
let b = 3
console.log(b)
const c = 4
const c = 5
console.log(c)
var d = 4
let d = 5
const d = 6
console.log(d)
{
console.log(a)
let a = 10
{
console.log(b)
let b = 20
}
}
{
console.log(a)
const a = 10
{
console.log(b)
const b = 20
}
}
=> hoisting X ?
{
let a = 10
{
console.log(a)
let a = 20
}
}
{
const a = 10
console.log(a)
{
console.log(a)
const a = 20
console.log(a)
}
}
var a = 10
console.log(window.a)
console.log(a)
delete a
console.log(window.a)
console.log(a)
window.b = 20
console.log(window.b)
console.log(b)
delete b
console.log(window.b)
console.log(b)
let c = 30
console.log(window.c)
console.log(c)
delete c
console.log(window.c)
console.log(c)
const d = 40
console.log(window.d)
console.log(d)
delete d
console.log(window.d)
console.log(d)