Skip to content

Latest commit

 

History

History
executable file
·
203 lines (182 loc) · 2.3 KB

1. block scope.md

File metadata and controls

executable file
·
203 lines (182 loc) · 2.3 KB

1. Block Scope

1-1. 소개

{
  let a = 10
  {
    let a = 20
    console.log(a)
  }
  console.log(a)
}
console.log(a)
function hasValue (p) {
  console.log(v)
  if (p) {
    var v = 'blue'
    console.log(v)
  } else {
    var v = 'red'
    console.log(v)
  }
  console.log(v)
}
hasValue(10)
function hasValue (p) {
  console.log(v)
  if (p) {
    let v = 'blue'
    console.log(v)
  } else {
    let v = 'red'
    console.log(v)
  }
  console.log(v)
}
hasValue(10)

1-2. 상세

1) let, const에 대해서만.

console.log(a)
if (true) {
  var a = 10
  if (true) {
    var a = 20
    console.log(a)
  }
  console.log(a)
}
console.log(a)
console.log(a)
if (true) {
  let a = 10
  if (true) {
    const a = 20
    console.log(a)
  }
  console.log(a)
}
console.log(a)

2) Hoisting ?

if (true) {
  let a = 10
  if (true) {
    console.log(a)
    const a = 20
  }
  console.log(a)
}
console.log(a)

=> TDZ

3) this ?

var value = 0
var obj = {
  value: 1,
  setValue: function () {
    this.value = 2;
    (function () {
      this.value = 3
    })();
  }
}
obj.setValue()
console.log(value)
console.log(obj.value)

왜 다르게 나올까?

var value = 0
var obj = {
  value: 1,
  setValue: function () {
    var self = this
    self.value = 2;
    (function () {
      self.value = 3
    })()
  }
}
obj.setValue()
console.log(value)
console.log(obj.value)
let value = 0
let obj = {
  value : 1,
  setValue : function () {
    this.value = 2
    {
      this.value = 3
    }
  }
}
obj.setValue()
console.log(value)
console.log(obj.value)

4) 모든 형태에 적용.

var sum = 0
for (let i = 1 ; i <= 10 ; i++) {
  sum += i
}
console.log(sum)
console.log(i)
{
  let a = 2
  if (a > 1) {
    let b = a * 3
    console.log(b)
  } else {
    let b = a / 3
    console.log(b)
  }
  console.log(b)
}
console.log(a)
if (Math.random() < 0.5) {
  let j = 0
  console.log(j)
} else {
  let j = 1
  console.log(j)
}
console.log(j)
let a = Math.ceil(Math.random() * 3)
switch (a) {
  case 1: {
    let b = 10
    console.log(a + b)
    break
  }
  case 2: {
    let b = 20
    console.log(a + b)
    break
  }
  case 3: {
    let b = 30
    console.log(a + b)
    break
  }
}
console.log(a, b)