javascript in depth all you need to know about expressions statements and expression statements - Lee-hyuna/33-js-concepts-kr GitHub Wiki
Javascriptμ Expressions, Statements λ° Expression Statementsμ λν΄ μμμΌ ν λͺ¨λ κ²
μλ¬Έ: All you need to know about Javascript's Expressions, Statements and Expression Statements
μ΄ ν¬μ€ν μ λ€λ³΄κ³ λλ©΄ μλ μ½λκ° μλνλ λ°©μκ³Ό μλ μ리μ λν΄ μμΈν μ€λͺ ν μ μμ΄μΌνλ€.
{} + 1 // 1
{2} + 2 // 2
{2+2} + 3 // 3
{2+2} - 3 // -3
Javascriptμλ ν¬κ² λ κ°μ§ λ¬Έλ² μΉ΄ν κ³ λ¦¬κ° μλ€.
- Statements (ꡬ문)
- Expressions (ννμ)
ννμμ ꡬ문μ²λΌ λμ ν μ μκΈ°μ κ΅¬λ³ νλ κ²μ μ€μνλ€. ννμ ꡬ문λ μ‘΄μ¬νλ€. λ°λ©΄μ ꡬ문μ ννμ μ²λΌ λμν μ μλ€.
EXPRESSIONS (ννμ)
ννμμ λ¨μΌ κ°μ μμ±νλ€
ννμμ λ¨μΌ κ°μ΄ λλ μλ°μ€ν¬λ¦½νΈ μ½λ μ€λν«μ΄λ€. ννμμ μνλ λ§νΌ κΈΈ μ μμ§λ§, νμ λ¨μΌ κ°μ΄λλ€.
2 + 2 * 3 / 2
(Math.random() * (100 - 20)) + 20
functionCall()
window.history ? useHistory() : noHistoryFallback()
1+1, 2+2, 3+3
declaredVariable
true && functionCall()
true && declaredVariable
μμ λͺ¨λ ννμμ λ¨μΌ κ°μ λ°ννλ€. λ°λΌμ μλμ console.log
μΈμλ λ¨μΌ κ°μ λ°ννκ² λκ³ νλ©΄μ μΆλ ₯λλ€.
console.log(true && 2 * 9) // 18
ννμμ΄ λ°λμ μνλ₯Ό λ³κ²½νμ§λ μλλ€
μλ₯Ό λ€μ΄,
const assignedVariable = 2; //this is a statement, assignedVariable is state
assignedVariable + 4 // expression
assignedVariable * 10 // expression
assignedVariable - 10 // expression
console.log(assignedVariable) // 2
μμ μμ μ μλ λͺ¨λ ννμμλ λΆκ΅¬νκ³ assignedVariable
μ κ°μ μ¬μ ν ββ2μ΄λ€. ννμμ΄ λ¬΄μ‘°κ±΄ μν(λ³μ)λ₯Ό λ³κ²½νλ κ²μ΄ μλ κ²μ΄λ€.
νμ§λ§ ν¨μλ λ€λ₯΄λ€. ν¨μ νΈμΆμ ννμμ΄μ§λ§, ν¨μλ μνλ₯Ό λ³κ²½νλ ꡬ문μ ν¬ν¨ ν μ μλ€.
foo () => {
// ...
}
μμ μμ μμ foo()
ν¨μλ μνλ λ΄μ©μ μ±μ΄λ€λ©΄ κ°μ λ°ννκ±°λ λ³μ κ°μ λ³κ²½ν μ μλ€. κ·Έλ¬λ μλμ κ°μ΄ μμ±λλ€λ©΄ μ΄λ¨κΉ?
const foo = foo () => {
assignedVariable = 14
}
μ¬μ ν foo()
ν¨μλ ννμμ΄μ§λ§, νΈμΆμ νλ€λ©΄ μν λ³κ²½μ΄ κ°λ₯νλ€. μ¦ ννμκ³Ό ꡬ문μ κ²½κ³κ° λͺ¨νΈνλ€. foo()
ν¨μλ₯Ό λ λμ λ°©μμΌλ‘ λ°κΎΈμ΄ 보μ.
const foo = foo () => {
return 14 //explicit return for readability
}
assignedVariable = foo()
μΆκ°λ‘ λ λμ λ°©λ²μ μλμ κ°λ€.
const foo = foo (n) => {
return n//explicit return for readability
}
assignedVariable = foo(14)
μ΄λ κ²νλ©΄ μ½λκ° λ μ½κΈ° μ½κ³ νΈνλλ©°, ννμκ³Ό ꡬ문 μ¬μ΄μ λͺ νν ꡬλ³κ³Ό λΆλ¦¬κ° μλ€. μ΄κ²μ κΈ°λ₯μ μ΄κ³ μ μΈμ μΈ μλ°μ€ν¬λ¦½νΈμ κΈ°λ³Έμ΄λ€.
STATEMENTS (ꡬ문)
ꡬ문μ ν¨μν νλ‘κ·Έλλ°μ 골칫거리μ΄λ€. κΈ°λ³Έμ μΌλ‘ ꡬ문μ νλμ μννλ μν μ κ°μ§λ€.
μλ°μ€ν¬λ¦½νΈμμ κ°μ΄ κΈ°λλλ κ³³μμλ ꡬ문μ μ¬μ©ν μ μλ€. ν¨μμ μΈμ, ν λΉμ μ€λ₯Έμͺ½(right-side), νΌμ°μ°μ, λ°ν κ° λ±μΌλ‘ μ¬μ©ν μ μλ€.
foo(if () {return 2}) //js engine mind = blown
μλ°μ€ν¬λ¦½νΈμμμ ꡬ문μ μλμ ννλ‘ μ‘΄μ¬νλ€.
- if
- if-else
- while
- do-while
- for
- switch
- for-in
- with (deprecated)
- debugger
- variable declaration
λΈλΌμ°μ μ μ½μμ μλμ μ€λν«μ μ λ ₯νκ³ μν°λ₯Ό λλ¬λ³΄μ.
if (true) {9+9}
μ΄ μ€λν«μ΄ 18
μ λ°ννλ κ²°κ³Όλ₯Ό λ³Ό κ²μ΄λ€. κ·ΈλΌμλ λΆκ΅¬νκ³ ννμμΌλ‘ μ¬μ©ν μ μμΌλ©°, κ°μ κΈ°λνλ κ³³μμ μ¬μ©ν μ μλ€. κ΅¬λ¬Έμ΄ μ무κ²λ λ°νμ νμ§ μλλ€κ³ μμνκΈ° λλ¬Έμ μ΄μνλ€. λ°ν κ°μ μ¬μ©ν μ μλ€λ©΄ κ±°μ μΈλͺ¨κ° μλ€. μ΄μνλ€.
ν¨μ μ μΈ, ν¨μ ννμ λ° μ΄λ¦μ΄ μλ ν¨μ ννμ
ν¨μ μ μΈμ ꡬ문μ΄λ€.
function foo (func) {
return func.name
}
ν¨μ ννμμ ννμμ΄λ€. μλλ μ΅λͺ ν¨μλΌκ³ λΆλ¦¬λ ν¨μλ€.
console.log(foo(function () {} )) // ""
μ΄λ¦μ΄ μλ ν¨μ ννμμ μ΅λͺ ν¨μμ κ°μ ννμμ΄μ§λ§ μ΄λ¦μ΄ μλ€λ μ°¨μ΄ μ μ΄ μλ€.
console.log(foo(function myName () {} )) // "myName"
ννμμΌλ‘μμ ν¨μμ μ μΈλ¬ΈμΌλ‘μμ ν¨μ μ¬μ΄μ ꡬλ³μ ν μ€ μλ©΄ μλμ λ΄μ©λ μ΄ν΄ν μ μμ κ²μ΄λ€.
μλ°μ€ν¬λ¦½νΈκ° κ°μ κΈ°λνλ ν¨μλ₯Ό μ μΈν λλ§λ€ κ°μ κ°μΌλ‘ μ¬μ©ν μ μλ€λ©΄, μ€λ₯κ° λ°μνκ² λλ€. λΈλ‘ ꡬ문 (μ¦, κ°μ κΈ°λνμ§ μλ κ²½μ°)μ μ€ν¬λ¦½νΈ, λͺ¨λ λλ μ΅μμ λ 벨μ κΈλ‘λ² μμ€μμ ν¨μλ₯Ό μ μΈνλ©΄ ν¨μ μ μΈμ΄ λ°μνλ€.
μλ₯Ό λ€μ΄
if () {
function foo () {} // top level of block, declaration
}
function foo () {} //global level, declaration
function foo () {
function bar() {} //top level of block, declaration
}
function foo () {
return function bar () {} // named function expression
}
foo(function () {}) // anonymous function expression
function foo () {
return function bar () {
function baz () {} // top level of block, declaration
}
}
function () {} // SyntaxError: function statement requires a name
if (true){
function () {} //SyntaxError: function statement requires a name
}
ννμμ ꡬ문μΌλ‘ λ³ν: ννμ ꡬ문
μ΄κ²μ λ§€μ° κ°λ¨νλ€.
2+2; //expression statement
foo(); //expression statement
ννμμ ννμ ꡬ문μΌλ‘ λ³νν μ μλ€. λ¨μ§ λΌμΈ λμ μΈλ―Έμ½λ‘ μ μΆκ°νκ±°λ μμ
μ μνν μ μλ μλ μΈλ―Έμ½λ‘ μ½μ
μ νμ©νλ©΄ λλ€. 2+2
μ체λ ννμμ΄μ§λ§ μμ ν λΌμΈμ λ¬Έμ₯μ΄λ€.
2+2 // on its own is an opposition
foo(2+2) //so you can use it anywhere a value is expected
true ? 2+2 : 1 + 1
function foo () {return 2+2}
2+2; //expression statement
foo(2+2;) //syntaxError
μΈλ―Έμ½λ‘ vs μΌν μ°μ°μ
μΈλ―Έμ½λ‘ μΌλ‘ μ¬λ¬ ꡬ문μ κ°μ μ€μ μ μ§ν μ μλ€.
const a; function foo () {}; const b = 2
μΌν μ°μ°μλ λ€μ€ ννμμ μ°κ²°νκ³ , λ§μ§λ§ ννμμ λ°νν μ μλλ‘ νλ€.
console.log( (1+2,3,4) ) //4
console.log( (2, 9/3, function () {}) ) // function (){}
console.log( (3, true ? 2+2 : 1+1) ) // 4
Javascript μμ§μ κ°μ κΈ°λνλ ν κ°μ§ λ°©λ²μ κ΄νΈμμ΄ ()λ₯Ό μ¬μ©νλ κ²μ΄λ€. κ° ννμμ console.logμ μΈμλ‘ μ²λ¦¬λλ€.
function foo () {return 1, 2, 3, 4}
foo() //4
λͺ¨λ ννμμ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ κ³μ°λκ³ λ§μ§λ§ ννμμ΄ λ°νλλ€.
IIFEs (μ¦μ μ€ν ν¨μ ννμ)
μ΅λͺ ν¨μλ ννμμ΄ λ μ μλ€ μλ°μ€ν¬λ¦½νΈκ° κ°μ κΈ°λνλ κ³³μμ μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ€λ©΄, κ΄νΈλ‘ κ°μ κΈ°λ νλλ‘ μλ°μ€ν¬λ¦½νΈμ μ§μν μ μλ€λ©΄, μ΅λͺ ν¨μλ₯Ό ν΄λΉ κ°μΌλ‘ μ λ¬ν μ μλ€λ κ²μ μλ―Ένλ€.
function () {}
κ·Έλμ μμ μμ λ μ ν¨νμ§ μμ§λ§ μλμ μμ λ μ ν¨νλ€.
(function () {}) // this returns function () {}
μ΅λͺ μ ν¨μλ₯Ό κ΄νΈ μμ λ£μΌλ©΄ μ΅λͺ μ ν¨μκ° μ¦μ μ€νλμ΄ λ°νλλ€. μ¦, λ€μκ³Ό κ°μ΄ μ¦μ νΈμΆν μ μλ€.
(function () {
//do something
})()
κ·Έλμ μλ μμ λ€μ κ°λ₯νλ€.
(function () {
console.log("immediately invoke anonymous function call")
})() // "immediately invoke anonymous function call"
(function () {
return 3
})() // 3
console.log((function () {
return 3
})()) // 3
//you can also pass an argument to it
(function (a) {
return a
})("I'm an argument") // I'm an argument
κ°μ²΄ 리ν°λ΄ vs λΈλ‘ ꡬ문
r: 2+2 // valid
foo()
const foo = () => {}
μμ λ΄μ©μ κΈλ‘λ² μ€μ½νμμλ μΌλ ¨μ ꡬ문μΌλ‘, μ ν¨ν ꡬ문μΌλ‘ λΆμλμ΄ μ€νλλ€ .r
μ λ μ΄λΈμ΄λΌκ³ λΆλ₯΄λ©° 루νλ₯Ό κΉ¨λ λ° μ£Όλ‘ μ μ©ν©λλ€. μ:
loop: {
for (const i = 0; i < 2; i++) {
for (const n = 0; n <2; n++) {
break loop //breaks outer loop and stops entire loop
}
}
}
ννμμ΄λ ννμ ꡬ문μ λ μ΄λΈμ 미리 μ€μ ν μ μλ€. μ΄λ κ²ν¨μΌλ‘μ¨ κ°λ³ μ€νμ€μ λ§λ€μ§ μλλ€λ μ μ μ μνλΌ.
lab: function a () {}
console.log(lab) //ReferenceError: lab is not defined
μ€κ΄νΈ { }
λ₯Ό μ¬μ©νλ©΄, μλμ κ°μ΄ ννμ ꡬ문과 λͺ
λ Ήλ¬Έμ κ·Έλ£Ήνν μ μλ€.
{var a = "b"; func(); 2+2} // 4
μμ λ΄μ©μ λΈλΌμ°μ μ½μμ λΆμ¬ λ£μΌλ©΄ 4λ₯Ό λ°ννκ³ console.log (a)
λ₯Ό μννλ©΄ λ¬Έμμ΄ b
λ₯Ό μ»λλ€. μ΅μν κ°μ²΄ 리ν°λ΄κ³Όλ λ€λ₯Έ λΈλ‘ ꡬ문 νΈμΆ ν μ μλ€.
console.log({a: 'b'}) // {a: 'b'}
console.log({var a = "b", func(), 2+2}) // SyntaxError
const obj = {var a = "b", func(), 2+2} // SyntaxError
λΈλ‘ λ¬Έμ κ° λλ ννμμΌλ‘ μ¬μ©ν μ μλ€. console.logλ ν¨μμ΄λ―λ‘ μΈμλ‘ κ΅¬λ¬Έμ μ¬μ©ν μ μλ€. κ·Έλ¬λ κ°μ²΄λ 리ν°λ΄μ νμ©νλ€.
{} + 1 //1
{2} + 2 // 2
{2+2} + 3 // 3
{2+2} -3 // -3
ꡬ문 μ€λ₯λ₯Ό λ°μμν€κ±°λ κ°κ° 1, 4, 7μ λ°νν κ²μΌλ‘ μμν μ μλ€. ꡬ문μ κ°μΌλ‘ μ¬μ©λ μ μκΈ° λλ¬Έμ μ΄λ€ κ²λ λ°νν΄μλ μ λλ€λ κ²μ λͺ
μ¬νλΌ. λ°λΌμ Javascriptλ μ€λ₯λ₯Ό λμ§κΈ°λ³΄λ€λ +
μ°μ°μμ νΌμ°μ°μλ₯Ό μ«μ λλ λ¬Έμμ΄λ‘ λ³ννλ €κ³ μλνλ€. λ°λΌμ λΈλ‘ λ¬Έμ μν΄ λ°νλλ κ²μ νΌμ°μ°μλ‘ μ¬μ©λλ 0
μΌλ‘ μ묡μ μΌλ‘ κ°μλλ€.