Upgrade to Pro — share decks privately, control downloads, hide ads and more …

스코프와 실행 문맥

스코프와 실행 문맥

자바스크립트의 스코프와 실행 문맥을 다이어그램과 함께 알기 쉽게 소개합니다.

Coderifleman

March 31, 2017
Tweet

More Decks by Coderifleman

Other Decks in Technology

Transcript

  1. Global Scope Function Scope Block Scope ೐۽Ӓ۔੹୓੸ਵ۽੽Ӕೡࣻ੓ח ୭࢚ਤਬബߧਤ ੉ਬബߧਤחIPTU ё୓৬োҙغݴ࠳ۄ਋੷חXJOEPX

    /PEFKTীחHMPCBM۽ઓ੤ೣ ೣࣻղীࢲ݅߸ࣻо੷੢غҊ ੽Ӕೡࣻ੓חਬബߧਤ ࠶۾ղীࢲ݅߸ࣻо੷੢غҊ ੽Ӕೡࣻ੓חਬബߧਤ let, const(ECMAScript 6)
  2. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); // 1 + 2 = 3
  3. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); // 1 + 2 = 3
  4. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); // 1 + 2 = 3
  5. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); // 1 + 2 = 3
  6. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); // 1 + 2 = 3 Global Scope Lexical Scope Lexical Scope
  7. Global Scope function something(a, b) {
 var c = a

    + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2);
  8. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope
  9. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (something)
  10. Lexical Scope (something) Global Scope function something(a, b) {
 var

    c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2);
  11. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (something) Lexical Scope (print)
  12. Global Scope Lexical Scope (print) function something(a, b) {
 var

    c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Lexical Scope (something)
  13. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  14. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  15. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Global Scope Lexical Scope (print) Lexical Scope (something)
  16. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  17. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  18. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  19. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  20. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  21. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  22. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  23. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  24. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  25. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  26. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  27. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  28. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  29. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  30. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  31. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  32. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  33. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 3 Global Scope Lexical Scope (print) Lexical Scope (something)
  34. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  35. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  36. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  37. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  38. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  39. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 3 Global Scope Lexical Scope (print) Lexical Scope (something)
  40. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  41. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 3 Global Scope Lexical Scope (print) Lexical Scope (something)
  42. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 3 Global Scope Lexical Scope (print) Lexical Scope (something)
  43. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 3 Global Scope Lexical Scope (print) Lexical Scope (something)
  44. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  45. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  46. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  47. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Global Scope Lexical Scope (print) Lexical Scope (something)
  48. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  49. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  50. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  51. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  52. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 Global Scope Lexical Scope (print) Lexical Scope (something)
  53. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  54. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  55. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 Global Scope Lexical Scope (print) Lexical Scope (something)
  56. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); 1 2 3 Global Scope Lexical Scope (print) Lexical Scope (something)
  57. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  58. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛ function

    outerFunc() {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  59. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); ☛ [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  60. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); ☛ [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  61. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); ☛ [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  62. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); ☛ [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  63. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); ☛ [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  64. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function outerFunc()

    {
 function innerFunc() {
 a = 20;
 }
 
 innerFunc();
 }
 
 outerFunc(); ☛ [Left Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ੹׳ হ׮ݶ(MPCBMझ௏೐ীࢤࢿೞৈ੹׳ sVTFTUSJDUsݽ٘ীࢲח3FGFSFODF&SSPSߊࢤ
  65. function outerFunc() {
 function innerFunc() {
 var a = b

    + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc)
  66. ☛ Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) function

    outerFunc() {
 function innerFunc() {
 var a = b + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ
  67. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛ function

    outerFunc() {
 function innerFunc() {
 var a = b + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ
  68. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛ function

    outerFunc() {
 function innerFunc() {
 var a = b + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ
  69. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛ function

    outerFunc() {
 function innerFunc() {
 var a = b + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ
  70. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛ function

    outerFunc() {
 function innerFunc() {
 var a = b + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ
  71. Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛ function

    outerFunc() {
 function innerFunc() {
 var a = b + 10;
 }
 
 innerFunc();
 }
 
 outerFunc(); [Right Hand Side] ߸ࣻо(MPCBMझ௏೐ী੓׮ݶ
 ߸ࣻী੷੢ػч੹׳ হ׮ݶ3FGFSFODF&SSPSߊࢤ
  72. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc)
  73. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  74. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  75. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  76. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  77. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  78. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  79. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  80. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  81. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  82. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  83. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  84. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  85. var a = 20; var b = 5; function outerFunc()

    { var b = 10; 
 function innerFunc() {
 var c = a + b;
 }
 
 innerFunc();
 }
 
 outerFunc(); Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) Lexical Scope (outerFunc) Global Scope Lexical Scope (innerFunc) ☛
  86. function something() {
 for(var i = 0; i < 5;

    i++) {
 // do something...
 }
 
 console.log(i); // ?
 }
 
 something();
  87. function something() {
 for(var i = 0; i < 5;

    i++) {
 // do something...
 }
 
 console.log(i); // ?
 }
 
 something();
  88. function something() {
 for(var i = 0; i < 5;

    i++) {
 // do something...
 }
 
 console.log(i); // 5
 }
 
 something();
  89. function something() {
 var a = 20;
 
 if (true)

    {
 var a = 30;
 }
 
 console.log(a); // ??
 } something();
  90. function something() {
 var a = 20;
 
 if (true)

    {
 var a = 30;
 }
 
 console.log(a); // ??
 } something();
  91. function something() {
 var a = 20;
 
 if (true)

    {
 var a = 30;
 }
 
 console.log(a); // 30
 } something();
  92. function something() {
 for (let i = 0; i <

    5; i++) {
 // do something...
 }
 
 console.log(i); // ??????????????
 } something();
  93. function something() {
 for (let i = 0; i <

    5; i++) {
 // do something...
 }
 
 console.log(i); // ??????????????
 } something();
  94. function something() {
 for (let i = 0; i <

    5; i++) {
 // do something...
 }
 
 console.log(i); // ReferenceError
 } something();
  95. function something() {
 const a = 20;
 
 if (true)

    {
 const a = 30;
 }
 
 console.log(a); // ??
 } something();
  96. function something() {
 const a = 20;
 
 if (true)

    {
 const a = 30;
 }
 
 console.log(a); // ??
 } something();
  97. function something() {
 const a = 20;
 
 if (true)

    {
 const a = 30;
 }
 
 console.log(a); // 20
 } something();
  98. function something() {
 const a = 10;
 const b =

    20;
 
 {
 const c = a + b;
 console.log(c); // 30
 }
 
 console.log(c); // ??????????????
 } something();
  99. function something() {
 const a = 10;
 const b =

    20;
 
 {
 const c = a + b;
 console.log(c); // 30
 }
 
 console.log(c); // ??????????????
 } something();
  100. function something() {
 const a = 10;
 const b =

    20;
 
 {
 const c = a + b;
 console.log(c); // 30
 }
 
 console.log(c); // ReferenceError
 } something();
  101. function something() {
 console.log(a); // ?????????
 console.log(b); // ?????????
 


    var a, b;
 
 // do something...
 } function something() {
 console.log(a); // ??????????????
 console.log(b); // ??????????????
 
 let a, b;
 
 // do something...
 }
  102. function something() {
 console.log(a); // ?????????
 console.log(b); // ?????????
 


    var a, b;
 
 // do something...
 } function something() {
 console.log(a); // ??????????????
 console.log(b); // ??????????????
 
 let a, b;
 
 // do something...
 }
  103. function something() {
 console.log(a); // undefined
 console.log(b); // undefined
 


    var a, b;
 
 // do something...
 } function something() {
 console.log(a); // ReferenceError
 console.log(b); // Not running
 
 let a, b;
 
 // do something...
 }
  104. function something() { var a = 10; console.log(a); // 10

    console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(var i = 0, n = a; i < n; i++) { var b = a * i;
 } }
  105. function something() { var a = 10; console.log(a); // 10

    console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(var i = 0, n = a; i < n; i++) { var b = a * i;
 } } Lexical Scope (something)
  106. function something() { var a = 10; console.log(a); // 10

    console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(var i = 0, n = a; i < n; i++) { var b = a * i;
 } } Lexical Scope (something)
  107. function something() { var a = 10; console.log(a); // 10

    console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(var i = 0, n = a; i < n; i++) { var b = a * i;
 } } Lexical Scope (something)
  108. function something() { var a = 10; console.log(a); // 10

    console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(var i = 0, n = a; i < n; i++) { var b = a * i;
 } } Lexical Scope (something) ஹ౵ੌױ҅ীࢲ߸ࣻࢶ঱ޙਸо੢ݢ੷೧ࢳ োҙػ۩दஸझ௏೐ী߸ࣻܳোѾ
  109. function something() { var a; var i; var n; var

    b; a = 10; console.log(a); // 10 console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(i = 0, n = a; i < n; i++) { b = a * i;
 } }
  110. function something() { var a; var i; var n; var

    b; a = 10; console.log(a); // 10 console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(i = 0, n = a; i < n; i++) { b = a * i;
 } }
  111. function something() { var a; var i; var n; var

    b; a = 10; console.log(a); // 10 console.log(i); // undefined; console.log(n); // undefined; console.log(b); // undefined; for(i = 0, n = a; i < n; i++) { b = a * i;
 } } ݃஖߸ࣻܳՑযৢ۰ࢲप೯ೞח ݽনҗэ׮ೞৈ)PJTUJOH੉ۄҊೣ
  112. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } } something(); Lexical Scope (something)
  113. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } } something(); Lexical Scope (something)
  114. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } } something(); Lexical Scope (something) ೣࣻࢶ঱ޙ਷೦࢚о੢ݢ੷ Ցযৢܽ׮
  115. Lexical Scope (something) function something() { console.log(innerFunc); // ???????? innerFunc();

    // ?????????????? var innerFunc = function() { // do something... }; } something();
  116. Lexical Scope (something) function something() { console.log(innerFunc); // undefiend innerFunc();

    // ReferenceError var innerFunc = function() { // do something... }; } something();
  117. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something();
  118. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something)
  119. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) JOOFS'VODח੉޷4DPQFղী ઓ੤ೞ޲۽ޖद
  120. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  121. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  122. function something() { console.log(innerFunc); // ???????? innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  123. function something() { console.log(innerFunc); // function innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  124. function something() { console.log(innerFunc); // function innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  125. function something() { console.log(innerFunc); // function innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  126. function something() { console.log(innerFunc); // function innerFunc(); // ? function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  127. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  128. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  129. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  130. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  131. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  132. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  133. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  134. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // ? } something(); Lexical Scope (something) ☛
  135. function something() { console.log(innerFunc); // function innerFunc(); // 1 function

    innerFunc() { console.log(1); } var innerFunc = function() { console.log(2); } innerFunc(); // 2 } something(); Lexical Scope (something) ☛
  136. t u http://www.ecma-international.org/ecma-262/6.0/#sec-execution-contexts A stack is used to track execution

    contexts. The running execution context is always the top element of this stack.
  137. t u http://www.ecma-international.org/ecma-262/6.0/#sec-execution-contexts A new execution context is created whenever

    control is transferred from the executable code associated with the currently running execution context to executable code that is not associated with that execution context
  138. From the executable code associated with the currently running execution

    context to executable code that is not associated with that execution context.
  139. code evaluation From the executable code associated with the currently

    running execution context to executable code that is not associated with that execution context.
  140. code evaluation (MPCBM$PEF 'VODUJPO$PEF &WBM$PEF From the executable code associated

    with the currently running execution context to executable code that is not associated with that execution context.
  141. code evaluation Initializing execution context Initializing execution context Initializing execution

    context (MPCBM$PEF 'VODUJPO$PEF &WBM$PEF From the executable code associated with the currently running execution context to executable code that is not associated with that execution context.
  142. Execution Context (Global) function something(a, b) {
 var c =

    a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ⚑
  143. ☛ Execution Context (Global) ⚑ function something(a, b) {
 var

    c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (something)
  144. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (something) Execution Context (Global) ⚑
  145. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (something) Execution Context (Global) ⚑
  146. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (something) Execution Context (Global) ⚑
  147. ☛ function something(a, b) {
 var c = a +

    b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (something) Execution Context (Global) ⚑
  148. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  149. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  150. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  151. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  152. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  153. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  154. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); Execution Context (print)
  155. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2);
  156. ☛ Execution Context (something) Execution Context (Global) ⚑ function something(a,

    b) {
 var c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2);
  157. ☛ Execution Context (Global) ⚑ function something(a, b) {
 var

    c = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2);
  158. Execution Context (Global) ⚑ function something(a, b) {
 var c

    = a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2);
  159. ExecutionContext { LexicalEnvironment : LexicalEnvironment, VariableEnvironment : LexicalEnvironment, this :

    ResolveThisBinding() } http://www.ecma-international.org/ecma-262/6.0/#sec-resolvethisbinding
  160. ExecutionContext { LexicalEnvironment : LexicalEnvironment, VariableEnvironment : LexicalEnvironment, this :

    ResolveThisBinding() } http://www.ecma-international.org/ecma-262/6.0/#sec-resolvethisbinding
  161. ExecutionContext { LexicalEnvironment : LexicalEnvironment { ... }, VariableEnvironment :

    LexicalEnvironment { ... }, this : ResolveThisBinding() }
  162. ExecutionContext { LexicalEnvironment : LexicalEnvironment { EnvironmentRecord : EnvironmentRecord {

    ... }, OuterLexicalEnvironment : outerEnvironmentReference }, VariableEnvironment : LexicalEnvironment { ... }, this : ResolveThisBinding() }
  163. ExecutionContext { LexicalEnvironment : LexicalEnvironment { EnvironmentRecord : EnvironmentRecord {

    ... }, OuterLexicalEnvironment : outerEnvironmentReference }, VariableEnvironment : LexicalEnvironment { ... }, this : ResolveThisBinding() }
  164. ExecutionContext { LexicalEnvironment : LexicalEnvironment { EnvironmentRecord : EnvironmentRecord {

    ... }, OuterLexicalEnvironment : outerEnvironmentReference }, VariableEnvironment : LexicalEnvironment { ... }, this : ResolveThisBinding() }
  165. ExecutionContext { LexicalEnvironment : LexicalEnvironment { EnvironmentRecord : EnvironmentRecord {

    ... }, OuterLexicalEnvironment : outerEnvironmentReference }, VariableEnvironment : LexicalEnvironment { EnvironmentRecord : EnvironmentRecord { ... }, OuterLexicalEnvironment : outerEnvironmentReference }, this : ResolveThisBinding() }
  166. Execution Context (Global) function something(a, b) {
 var c =

    a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ⚑
  167. Execution Context (Global) function something(a, b) {
 var c =

    a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ⚑ ☛ Execution Context (something)
  168. Execution Context (Global) function something(a, b) {
 var c =

    a + b;
 
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ⚑ ☛ Execution Context (something)
  169. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something)
  170. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) this : ResolveThisBinding()
  171. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) this : ResolveThisBinding()
  172. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) this : global
  173. const foo = { a: 10, b: 20, bar() {

    return this.a + this.b; } }; foo.bar(); ☛ Execution Context (something) this : ResolveThisBinding()
  174. const foo = { a: 10, b: 20, bar() {

    return this.a + this.b; } }; foo.bar(); ☛ Execution Context (something) this : ResolveThisBinding()
  175. const foo = { a: 10, b: 20, bar() {

    return this.a + this.b; } }; foo.bar(); ☛ Execution Context (something) this : foo
  176. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) LexicalEnvironment : { … }, VariableEnvironment: { … }, this : global
  177. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  178. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global outerEnvironmentReference GlobalEnvironmentRecord ➠
  179. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  180. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (something) print: FunctionReference a: undefined, b: undefined, c: undefined
  181. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (something) print: FunctionReference a: 1, b: 2, c: undefined
  182. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (something) print: FunctionReference a: 1, b: 2, c: 3
  183. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (something) print: FunctionReference a: 1, b: 2, c: 3
  184. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) Execution Context (Global) ⚑
  185. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) Execution Context (Global) ⚑ Execution Context (print)
  186. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (something) Execution Context (Global) ⚑ Execution Context (print)
  187. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  188. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ outerEnvironmentReference LexicalEnvironmentRecord of something Execution Context (print) ➠ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  189. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (print) z: undefined
  190. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (print) z: undefined
  191. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ EnvironmentRecord (print) z: 3
  192. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  193. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  194. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  195. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) `a` variable is not in EnvironmentRecord of print LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  196. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  197. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ outerEnvironmentReference LexicalEnvironmentRecord of something Execution Context (print) ➠ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  198. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (something) print: FunctionReference a: 1, b: 2, c: 3
  199. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (something) print: FunctionReference a: 1, b: 2, c: 3 Execution Context (print)
  200. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (something) print: FunctionReference a: 1, b: 2, c: 3 Execution Context (print)
  201. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  202. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (print) z: 3
  203. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 print(c);
 } something(1, 2); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (print) z: 3 Execution Context (print)
  204. var a = 10; function outerFunc() { function innerFunc() {

    console.log(a); } innerFunc(); } outerFunc(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } Execution Context (innerFunc) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } Execution Context (outerFunc) EnvironmentRecord (global) a: 10
  205. যڃೣࣻоࢶ঱ػജ҃ਸߩযա प ೯ ظ ب  ࢶ ঱ ػ 

    द ੼ ੄  ࢚ ਤ ജ҃ झ௏೐ ী੽Ӕೡࣻ੓ѱ غחӝמ Closure
  206. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛
  207. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛
  208. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛
  209. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛ [[closure]] : print Function
  210. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛ print Function [[closure]] : LexicalEnvironment (something)
  211. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛ print Function [[closure]] : LexicalEnvironment (something)
  212. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛ print Function [[closure]] : LexicalEnvironment (something)
  213. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛ print Function [[closure]] : LexicalEnvironment (something)
  214. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global ☛ print Function [[closure]] : LexicalEnvironment (something)
  215. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } ☛ print Function [[closure]] : LexicalEnvironment (something)
  216. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛
  217. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print)
  218. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) print Function [[closure]] : LexicalEnvironment (something)
  219. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) print Function [[closure]] : LexicalEnvironment (something)
  220. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) print Function [[closure]] : LexicalEnvironment (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }
  221. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) print Function [[closure]] : LexicalEnvironment (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }
  222. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something)
  223. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something)
  224. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something)
  225. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  226. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something) `a` variable is not in EnvironmentRecord of print LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  227. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  228. function something(a, b) {
 var c = a + b;


    
 function print(z) {
 console.log(`${a} + ${b} =`, z);
 }
 
 return print(c);
 } const log = something(1, 2); log(); ☛ Execution Context (print) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment } LexicalEnvironment (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  229. innerFunc Function [[closure]] : LexicalEnvironment (outerFunc) Execution Context (outerFunc) LexicalEnvironment

    : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (outerFunc) EnvironmentRecord : { a: 10, b: 20, c: 30 }
  230. innerFunc Function [[closure]] : LexicalEnvironment (outerFunc) Execution Context (outerFunc) EnvironmentRecord

    (outerFunc) EnvironmentRecord : { a: 10, b: 20, c: 30 } LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  231. innerFunc Function [[closure]] : LexicalEnvironment (outerFunc) Execution Context (outerFunc) LexicalEnvironment

    : { EnvironmentRecord, OuterLexicalEnvironment } EnvironmentRecord (outerFunc) EnvironmentRecord : { a: 10 }
  232. innerFunc Function [[closure]] : LexicalEnvironment (outerFunc) Execution Context (outerFunc) LexicalEnvironment

    : { EnvironmentRecord, OuterLexicalEnvironment } EnvironmentRecord (outerFunc) EnvironmentRecord : { a: 10 }
  233. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (something) a : 10
  234. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (something) a : 10
  235. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment }
  236. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ New created Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment }
  237. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment }
  238. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment }
  239. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment }
  240. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment }
  241. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment (with) LexicalEnvironment : { ObjectEnvironmentRecord : { b: 20 } OuterLexicalEnvironment } LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  242. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  243. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global
  244. function something() { const a = 10; with({b: 20}) {

    console.log(a); console.log(b); } } something(); ☛ Execution Context (something) LexicalEnvironment : { EnvironmentRecord, OuterLexicalEnvironment }, VariableEnvironment: { EnvironmentRecord, OuterLexicalEnvironment } this : global EnvironmentRecord (something) a : 10