ěŹě íěľ ę°ě´ë STEP 5 (Scope Introduction ~ Global Scope)
ë§ě ę˛ě ěëŁë¤
ě˝ëě ě ꡟí ě ěë ë˛ě
ě¤í돸ě ěěšëĽź 기ě¤ěźëĄ
íě scope(꡸ ě¤íëŹ¸ě´ ë¤ě´ ěë í¨ě)ëśí° ěěí´ ěíë ëłěě ę°ě ě°žě ëęšě§ ěě scopeëĄ íěíë¤
- ěě scopeěěë íě scope ë´ëś ě ëł´ě ě ꡟí ě ěë¤
- íě scopeěě ěě scope ë´ëś ě ëł´ěë ě ęˇźě´ ę°ëĽíë¤
ě´ë¤ í¨ěëĄë ëëŹě¸ěŹ ěě§ ěě ę°ěĽ ěľěě scope
íëě ěš íě´ě§ěë íëě global scopeę° ěĄ´ěŹíë¤. ě´ë ěŹëŹ ę°ě scriptę° ěŹěŠí ě ěë ęłľěŠ ęłľę°
ě´ë¤.
// 1. a ëźë ëłě ě ě¸ & ę° í ëš var a = 1; // 2. oneě´ëźë í¨ě ě ě¸ & ě¤í function one () { console.log(a) } one(); // 5. setTimeout setTimeout(function two () { console.log(a) }, 1000); // 3. aëźë ëłě ě ě¸ & ę° í ëš var a = 2; // 4. console API ě¤í console.log(a); /* console ě°˝ 결곟 1 : 첍 ë˛ě§¸ console.log 2 : ě¸ ë˛ě§¸ console.log 2 : ë ë˛ě§¸ console.log */
đĄ íě´ë¨¸ í¨ě
ěë°ě¤íŹëŚ˝í¸ě ě¤í ěě ě°¸ęł
- íšě ěę°ě íšě í¨ě뼟 ě¤ííëëĄ íë í¨ěě´ë¤.
- ěš ë¸ëźě°ě ě ě˛ëŚŹëĽź ëśííë í¨ě ě¤ íëě´ë¤. ě´ ę˛˝ě° ěš ë¸ëźě°ě ë ě˛ëŚŹëĽź í í ě˛ëŚŹę° ěëŁëěěě ěë°ě¤íŹëŚ˝í¸ě ěë ¤ě¤ë¤.
íěŹ ě¤í ě¤ě¸ ë¤ëĽ¸ ě˝ëě ě¤íě´ ëë기 ě ěë
ě¤íě´ ëě§ ěëë¤.1) setTimeout(í¨ě, ěę°) : ěźě ěę° í í¨ě ě¤í
2) setInterval(í¨ě, ěę°) : ěźě ěę° ę°ę˛ŠěźëĄ í¨ě ë°ëłľ ě¤í
3) clearTimeout(ID) : ě¤íëęł ěë Timeout ě¤ě§
4) clearInterval(ID) : ě¤íëęł ěë Interval ě¤ě§
Scope/ ě§ě ëłě/ ě ě ëłě, ěë°ě¤íŹëŚ˝í¸ě ě¤í ěě ě°¸ęł
đ ě ěëłě var
í¨ě ë¨ě
ëĄ scopeę° ě í´ě§ë¤. ë¸ëĄ ë°ěěë ë¸ëĄ({}) ěě ěěąë ëłěě ě ꡟí ě ěë¤. ěŚ, ë¸ëĄ ěě ëłě뼟 ěěąíě´ë var뼟 ě´ěŠíë¤ëŠ´ ě§ě ëłěę° ěë ě ěëłěę° ëë¤.
var뼟 ě´ěŠí´ ę°ě ëłě뼟 ěŹëŹ ë˛ ě ě¸í ě ěë¤.
ëłě뼟 ě ě¸íě§ ěęł ë ę°ě í ëší ě ě기 ë돸ě ě¤ëĽëĽź ë°Šě§í기 ěí´ě ëëëĄ ěŹěŠíě§ ěë ę˛ ě˘ë¤. ě¤ëĽ ë°Šě§ëĽź ěí´ 'use strict';
뼟 ěë°ě¤íŹëŚ˝í¸ 맨 ěě ě ě´ě¤ë¤.
var c = 10; function me () { var c = 20; console.log(c); // 20 } var c = 30; // ę°ě ëłě ěŹě ě¸ ę°ëĽ me(); console.log(c); // 30
đ ě§ěëłě let
ë¸ëĄ ë¨ě
ëĄ scopeę° ě í´ě§ë¤.
letě ě´ěŠí´ ě´ëŻ¸ ě ě¸í ëłěë ë ë¤ě ě ě¸í ě ěë¤. ꡸ëŹë letě ěŹěŠí´ ě ě¸í ëłěě ě´ëŻ¸ í ëšë ę°ě ë¤ëĽ¸ ę°ěźëĄ ë°ęž¸ë ę˛ě ę°ëĽíë¤.
let a = 10; function my () { let a = 20; console.log(a); // 20 } let a = 30; // ëśę°ëĽ. ë¨, a = 30 ě´ëźęł ě°ëŠ´ ę°ëĽ my(); console.log(a); // error: Identifier 'a' has already been declared
đĄ íí¸, ëłě뼟 ě ě¸íë ë ë¤ëĽ¸ í¤ěëě¸ đ
const
ë 돴ěěźęš?
- ë¸ëĄ ë¨ěëĄ scopeę° ě í´ě§ë¤.
- ëłěę° ěë
ěě
뼟 ě ě¸íë¤. ěŚ, íë˛ í ëší ę°ě ëłę˛˝í ě ěë¤.
- const뼟 ě´ěŠí´ ě´ëŻ¸ ě ě¸í ëłěë ë ë¤ě ě ě¸í ě ěěźëŠ°, í ëšë ę°ě ëłę˛˝í ěë ěë¤.
const d = 10; function my () { const d = 20; console.log(d); // 20 } d = 30; // ě´ę˛ěĄ°ě°¨ ëśę°ëĽ. const뼟 ě´ěŠí´ ě ě¸íë ę˛ě ěěě´ë¤. my(); console.log(d); // error: Assignment to constant variable.
đĄ var, letęłź for ë°ëłľëŹ¸
1)
var
ęłź for ë°ëłľëŹ¸for(var i = 0; i<5; i++){ console.log(i); } /* 0 1 2 3 4 */ console.log('final i:', i); // final i: 5 // for ë°ëłľëŹ¸ě ë¸ëĄ ë°ęšĽěŞ˝ěě varëĄ ě ě¸ë ë¸ëĄ ě쪽ě ëłěě ě ꡟ ę°ëĽ
for(var i = 0; i < 3; i++){ setTimeout(function(){ alert(i); }, 0); } /* 3 3 3 */
2)
let
ęłź for ë°ëłľëŹ¸for(let i = 0; i < 5; i++){ console.log(i); } /* 0 1 2 3 4 */ console.log('final i:', i); // error: i is not defined // for ë°ëłľëŹ¸ě ë¸ëĄ ë°ęšĽěŞ˝ěě letěźëĄ ě ě¸ë ë¸ëĄ ě쪽ě ëłěě ě ꡟ ëśę°ëĽ
for(let j = 0; j < 3; j++){ setTimeout(function(){ alert(j); }, 0); } /* 0 1 2 */
scope, hoisting
ěŹě íěľ ę°ě´ë STEP 5 (~ Primitive and Reference Quiz)