70 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдкреНрд░рд╢реНрди

рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЕрдиреБрднрд╡реА рд▓реЛрдЧреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдРрд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЬреЛ рдореБрдЭреЗ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд▓рдЧреЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреЗ рд╕рдВрджрд░реНрдн рджрд┐рдП рдЧрдП рд╣реИрдВред

рдореИрдВ рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред рд▓реЗрдЦ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рддреЛ рдЪрд▓рддреЗ рд╣реИрдВред

70 рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдкреНрд░рд╢реНрди


рдкреНрд░рд╢реНрди:
1. рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
2. && рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
3. "рдСрдкрд░реЗрдЯрд░" рдХрд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
4. рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рдпреВрдиреАрд░реА рдкреНрд▓рд╕ (+ рдСрдкрд░реЗрдЯрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ?
5. рдПрдХ рдбреЛрдо рдХреНрдпрд╛ рд╣реИ?
6. рдЗрд╡реЗрдВрдЯ рдкреНрд░реЛрдкреЛрдЧреЗрд╢рди рдХреНрдпрд╛ рд╣реИ?
7. рдЗрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?
8. рдЗрд╡реЗрдВрдЯ рдХреИрдкреНрдЪрд░рд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?
9. Event.preventDefault () рдФрд░ event.stopPropagation () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?
10. Event.preventDefault () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдиреЗрдВ?
11. obj.someprop.x рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ?
12. рдПрдХ рдШрдЯрдирд╛ рд▓рдХреНрд╖реНрдп рдпрд╛ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ (event.target) рдХреНрдпрд╛ рд╣реИ?
13. (event.currentTarget)?
14. "==" "==="?
15. false?
16. "!!"?
17. ?
18. (Hoisting)?
19. (Scope)?
20. (Closures)?
21. JS ?
22. , ?
23. ┬лuse strict┬╗?
24. this?
25. ?
26. IIFE?
27. Function.prototype.apply?
28. Function.prototype.call?
29. call apply?
30. Function.prototype.bind?
31. JS ?
32. (Higher Order Functions)?
33. JS (First-class Objects)?
34. Array.prototype.map?
35. Array.prototype.filter?
36. Array.prototype.reduce?
37. arguments?
38. , ?
39. b ?
40. ECMAScript?
41. JS ES6 ECMAScript2015?
42. ┬лvar┬╗, ┬лlet┬╗ ┬лconst┬╗?
43. (Arrow Functions)?
44. (Classes)?
45. (Template Literals)?
46. (Object Destructuring)?
47. (Modules)?
48. Set?
49. (Callback Function)?
50. (Promises)?
51. async/await?
52. spread- rest-?
53. (Default Parameters)?
54. (Wrapper Objects)?
55. (Implicit and Explicit Coercion)?
56. NaN? , NaN?
57. , ?
58. , , ( "%")?
59. ?
60. AJAX?
61. JS ?
62. Object.freeze Object.seal?
63. ┬лin┬╗ hasOwnProperty?
64. рдЬреЗрдПрд╕ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреМрди рд╕реА рддрдХрдиреАрдХреЗрдВ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ?
65. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?
66. рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ?
67. рд╕рдВрд╕реНрдорд░рдг рдпрд╛ рд╕рдВрд╕реНрдорд░рдг рдХреНрдпрд╛ рд╣реИ?
68. рдЖрдк рд╕рдВрд╕реНрдорд░рдг рдХреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?
69. рдЯрд╛рдЗрдкрдСрдл рдирд▓ рд░рд┐рдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпреЛрдВ? рдпрджрд┐ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ?
70. "рдирдпрд╛" рдХреАрд╡рд░реНрдб рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

1. рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ 7 рдЬреЗрдПрд╕ "рдЖрджрд┐рдо" (рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ:

let primitiveTypes = ['string', 'number', 'null', 'undefined', 'boolean', 'symbol', 'bigint']

рджреВрд╕рд░реЗ, рд╡реЗ рдЭреВрдареЗ рдореВрд▓реНрдп рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рдмреВрд▓рд┐рдпрди () рдпрд╛ рдСрдкрд░реЗрдЯрд░ "" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмреВрд▓рд┐рдпрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо! рдЧрд▓рдд рд╣реИ:

console.log(!!null) // false
console.log(!!undefined) // false

console.log(Boolean(null)) // false
console.log(Boolean(undefined)) // false

рдареАрдХ рд╣реИ, рдЕрдм рдорддрднреЗрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИ:
  • рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдЬрд┐рд╕реЗ рдХреЛрдИ рдорд╛рди рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдПрдХ рдШреЛрд╖рд┐рдд рд▓реЗрдХрд┐рди рдЖрд░рдВрднрд┐рдХ рдЪрд░ рдирд╣реАрдВ;
  • рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ (1);
  • рд╡рд╕реНрддреБ рдХрд╛ рдХреЛрдИ рдирд╣реАрдВред

рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

let _thisIsUndefined
const doNothing = () => {}
const someObj = {
    a: 'ay',
    b: 'bee',
    c: 'si'
}
console.log(_thisIsUndefined) // undefined
console.log(doNothing()) // undefined
console.log(someObj['d']) // undefined

рдирд▓ "рдмрд┐рдирд╛ рдореВрд▓реНрдп рдХрд╛ рдореВрд▓реНрдп" рд╣реИред null рд╡рд╣ рдорд╛рди рд╣реИ рдЬреЛ рдЪрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм fs.readFile рд╡рд┐рдзрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ:

fs.readFile('path/to/file', (e, data) => {
    console.log(e) //    null
if(e) {
    console.log(e)
}
    console.log(data)
})

рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп, рд╣рдо "==" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдЪ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ "===" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЧрд▓рдд рд╣реЛрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рджреЗрдЦреЗрдВред

console.log(null == undefined) // true
console.log(null === undefined) // false

2. && рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


&& рдСрдкрд░реЗрдЯрд░ (рддрд╛рд░реНрдХрд┐рдХ) рд╕рднреА рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рдкрд╣рд▓рд╛ рдЧрд▓рдд рдорд╛рди рдпрд╛ рдЕрдВрддрд┐рдо рдСрдкрд░реЗрдВрдб рдкрд╛рддрд╛ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рд╛рдЧрддреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

console.log(false && 1 && []) // false
console.log(' ' && true && 5) // 5

рдпрджрд┐ рдХрдерди рдХреЗ рд╕рд╛рде:

const router: Router = Router()

router.get('/endpoint', (req: Request, res: Response) => {
    let conMobile: PoolConnection
    try {
        //    
    } catch (e) {
        if (conMobile) {
            conMobile.release()
        }
    }
})

&& рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдмрд╛рдд:

const router: Router = Router()

router.get('/endpoint', (req: Request, res: Response) => {
    let conMobile: PoolConnection
    try {
        //    
    } catch (e) {
        conMobile && conMobile.release()
    }
})

3. "рдСрдкрд░реЗрдЯрд░" рдХрд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


рд╕рдВрдЪрд╛рд▓рдХ "||" (рдмреВрд▓рд┐рдпрди рдпрд╛) рдкрд╣рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдкрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ ES6 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

console.log(null || 1 || undefined) // 1

function logName(name) {
    let n = name || Mark
    console.log(n)
}

logName() // Mark

4. рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ рдпреВрдиреАрд░реА рдкреНрд▓рд╕ (+ рдСрдкрд░реЗрдЯрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ?


рдПрдордбреАрдПрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ , + рд╕рдВрдЪрд╛рд▓рдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдореВрд▓реНрдп рдкрд░ рдХреЛрдИ рднреА рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИред

5. рдПрдХ рдбреЛрдо рдХреНрдпрд╛ рд╣реИ?


DOM рдпрд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ HTML рдФрд░ XML рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдПрдкреАрдЖрдИ) рд╣реИред рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд╣рд▓реА рдмрд╛рд░ HTML рдбреЙрдХреНрдпреВрдореЗрдВрдЯ ("рдкрд░реНрд╕") рдкрдврд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рд╡рд╕реНрддреБ рд╣реИ - DOMред DOM рдПрдХ рдЯреНрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░ (рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЯреНрд░реА) рд╣реИред DOM рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ DOM рдпрд╛ рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдФрд░ рдиреЛрдбреНрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ HTML рд╣реИ:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document Object Model</title>
</head>

<body>
    <div>
        <p>
            <span></span>
        </p>
        <label></label>
        <input>
    </div>
</body>

</html>

рдЗрд╕ HTML рдХрд╛ DOM рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



JS рдореЗрдВ, DOM рдХреЛ рдПрдХ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рддрддреНрд╡реЛрдВ, рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг, рд╕рдВрд╢реЛрдзрди, рд╡рд┐рд▓реЛрдкрди рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВред

6. рдЗрд╡реЗрдВрдЯ рдкреНрд░рдЪрд╛рд░ рдХреНрдпрд╛ рд╣реИ?


рдЬрдм рдХреЛрдИ рдИрд╡реЗрдВрдЯ DOM рддрддреНрд╡ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рди рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЙрд╕ рддрддреНрд╡ рдХреЛ "рдкреНрд░рдЪрд╛рд░рд┐рдд" рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ (Event.target) рдХрд╣рд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдШрдЯрдирд╛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ рдХреЗ рд╕рднреА рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд (рдкреНрд░рднрд╛рд╡рд┐рдд) рдХрд░рддреА рд╣реИред рдПрдХ рдШрдЯрдирд╛ рдкреНрд░рд╕рд╛рд░ рдХреЗ рддреАрди рдЪрд░рдг рдпрд╛ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:
  1. рд╡рд┐рд╕рд░реНрдЬрди (рдХрдмреНрдЬрд╛, рдЕрд╡рд░реЛрдзрди) рдЪрд░рдг - рдПрдХ рдШрдЯрдирд╛ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдирд╛ рдХреЗ рд▓рдХреНрд╖реНрдп рддрдХ рдЙрддрд░рддреА рд╣реИред
  2. рд▓рдХреНрд╖реНрдп рдЪрд░рдг рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдШрдЯрдирд╛ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддреА рд╣реИред
  3. рдЖрд░реЛрд╣реА рдЪрд░рдг - рдПрдХ рдШрдЯрдирд╛ event.target рд╕реЗ рдЙрдЧрддрд╛ рд╣реИ, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рдкреВрд░реНрд╡рдЬреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред



рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдХреЗ рд╡рд┐рддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред

7. рдПрдХ рдЗрд╡реЗрдВрдЯ рдкреЙрдкрдЕрдк рдХреНрдпрд╛ рд╣реИ?


рдЬрдм рдХреЛрдИ рдШрдЯрдирд╛ DOM рддрддреНрд╡ рдореЗрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рди рдХреЗрд╡рд▓ рдЗрд╕ рддрддреНрд╡ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред рдПрдХ рдШрдЯрдирд╛ "рдкреЙрдк рдЕрдк" (рдкрд╛рдиреА рдореЗрдВ рдПрдХ рд╣рд╡рд╛ рдХреЗ рдмреБрд▓рдмреБрд▓реЗ рдХреА рддрд░рд╣), рдЙрд╕ рддрддреНрд╡ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ рдЬрд┐рд╕рдиреЗ рдШрдЯрдирд╛ (рдЗрд╡реЗрдВрдЯ рдЯрд╛рд░рдЧреЗрдЯ) рдХреЛ рдЙрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪрд╛рдпрд╛, рдлрд┐рд░ рддрддреНрд╡ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рддрдХ рдФрд░ рднреА рдЕрдзрд┐рдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдорд╛рд░реНрдХрдЕрдк рд╣реИ:

<div class="grandparent">
    <div class="parent">
        <div class="child">1</div>
    </div>
</div>

рдФрд░ рдРрд╕рд╛ рдЬреЗрдПрд╕:

function addEvent(el, event, callback, isCapture = false) {
    if (!el || !event || !callback || typeof callback !== 'function') return

    if (typeof el === 'string') {
        el = document.querySelector(el)
    }
    el.addEventListener(event, callback, isCapture)
}

addEvent(document, 'DOMContentLoaded', () => {
    const child = document.querySelector('.child')
    const parent = document.querySelector('.parent')
    const grandparent = document.querySelector('.grandparent')

    addEvent(child, 'click', function(e) {
        console.log('child')
    })

    addEvent(parent, 'click', function(e) {
        console.log('parent')
    })

    addEvent(grandparent, 'click', function(e) {
        console.log('grandparent')
    })

    addEvent('html', 'click', function(e) {
        console.log('html')
    })

    addEvent(document, 'click', function(e) {
        console.log('document')
    })

    addEvent(window, 'click', function(e) {
        console.log('window')
    })
})

AddEventListener рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рддреАрд╕рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ - рдЙрдкрдпреЛрдЧрдХреИрдкрдЪрд░ред рдЬрдм рдЗрд╕рдХрд╛ рдорд╛рди рдЭреВрдард╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдШрдЯрдирд╛ рдЖрд░реЛрд╣реА рдЪрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЬрдм рдЗрд╕рдХрд╛ рдорд╛рди рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдИрд╡реЗрдВрдЯ рд╡рд┐рд╕рд░реНрдЬрди рдЪрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдЬреБрдбрд╝реА рдШрдЯрдирд╛рдУрдВ рдХреЗ "рд╢реНрд░реЛрддрд╛рдУрдВ" рдХреЗ рд▓рд┐рдП, рдИрд╡реЗрдВрдЯ рд▓рдХреНрд╖реНрдп рдЪрд░рдг рдореЗрдВ рд╣реИ, рдФрд░ рд╡рд┐рд╕рд░реНрдЬрди рдпрд╛ рдЪрдврд╝рд╛рдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЯрд╛рд░рдЧреЗрдЯ рдЪрд░рдг рдореЗрдВ рдИрд╡реЗрдВрдЯ рдХреНрд░рдо рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рд╢реНрд░реЛрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдкрдВрдЬреАрдХреГрдд рдереЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ - рд▓рдЧрднрдЧред рдпрджрд┐ рд╣рдо рдмрд╛рд▓ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрд╕реЛрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛: рдмрдЪреНрдЪрд╛, рдорд╛рддрд╛-рдкрд┐рддрд╛, рджрд╛рджрд╛-рджрд╛рджреА, HTML, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рд╡рд┐рдВрдбреЛред рдпрд╣рд╛рдБ рдПрдХ рдШрдЯрдирд╛ рдкреЙрдкрдЕрдк рдХреНрдпрд╛ рд╣реИред

8. рд╡рд┐рд╕рд░реНрдЬрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреНрдпрд╛ рд╣реИ?


рдЬрдм рдХреЛрдИ рдИрд╡реЗрдВрдЯ DOM рддрддреНрд╡ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рди рдХреЗрд╡рд▓ рдЗрд╕рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рд╕рд░реНрдЬрди рдЪрд░рдг рдореЗрдВ, рдШрдЯрдирд╛ рдЕрдкрдиреЗ рд╕рднреА рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдШрдЯрдирд╛ рд▓рдХреНрд╖реНрдп рддрдХ рдЙрддрд░рддреА рд╣реИред

рдорд╛рд░реНрдХрдЕрдк:

<div class="grandparent">
    <div class="parent">
        <div class="child">1</div>
    </div>
</div>

рдЬреЗ рдПрд╕:

function addEvent(el, event, callback, isCapture = false) {
    if (!el || !event || !callback || typeof callback !== 'function') return

    if (typeof el === 'string') {
        el = document.querySelector(el);
    }
    el.addEventListener(event, callback, isCapture)
}

addEvent(document, 'DOMContentLoaded', () => {
    const child = document.querySelector('.child')
    const parent = document.querySelector('.parent')
    const grandparent = document.querySelector('.grandparent')

    addEvent(child, 'click', function(e) {
        console.log('child');
    }, true)

    addEvent(parent, 'click', function(e) {
        console.log('parent')
    }, true)

    addEvent(grandparent, 'click', function(e) {
        console.log('grandparent')
    }, true)

    addEvent('html', 'click', function(e) {
        console.log('html')
    }, true)

    addEvent(document, 'click', function(e) {
        console.log('document')
    }, true)

    addEvent(window, 'click', function(e) {
        console.log('window')
    }, true)
})

AddEventListener рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рддреАрд╕рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ - рдЙрдкрдпреЛрдЧрдХреИрдкрдЪрд░ред рдЬрдм рдЗрд╕рдХрд╛ рдорд╛рди рдЭреВрдард╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдШрдЯрдирд╛ рдЖрд░реЛрд╣реА рдЪрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЬрдм рдЗрд╕рдХрд╛ рдорд╛рди рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдШрдЯрдирд╛ рдЧреЛрддрд╛ рдЪрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╣рдо рдмрд╛рд▓ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ: рд╡рд┐рдВрдбреЛ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, HTML, рджрд╛рджрд╛-рджрд╛рджреА, рдорд╛рддрд╛-рдкрд┐рддрд╛, рдмрдЪреНрдЪрд╛ред рдпрд╣ рдЖрдпреЛрдЬрди рдХрд╛ рд╡рд┐рд╕рд░реНрдЬрди рд╣реИред

9. Event.preventDefault () рдФрд░ event.stopPropagation () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


Event.preventDefault () рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝реЙрд░реНрдо рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдлрд╝реЙрд░реНрдо рдХреЛ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдВрджрд░реНрднрдореЗрдиреВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХреАрдмреЛрд░реНрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреАрдд / рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдпрд╛ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рддреЗ рд╕рдордп - рд▓рдЧрднрдЧ рдЯреНрд░рд╛рдВрд╕ред)ред Event.stopPropagation () рд╡рд┐рдзрд┐ рдИрд╡реЗрдВрдЯ рдкреНрд░рдЪрд╛рд░ (рдЗрд╕рдХреА рдЪрдврд╝рд╛рдИ рдпрд╛ рд╡рд┐рд╕рд░реНрдЬрди) рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреА рд╣реИред

10. Event.preventDefault () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдиреЗрдВ?


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо event.defaulPrevented рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдмреВрд▓рд┐рдпрди рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╡реЗрдВрдЯ рдХреЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

11. obj.someprop.x рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ?



const obj = {}
console.log(obj.someprop.x)

рдЙрддреНрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╣рдо рдХреБрдЫ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА x рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред obj .__ proto __.__ proto = null, рдЗрд╕рд▓рд┐рдП рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдкрд╛рд╕ x рдЧреБрдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

12. рдПрдХ рдШрдЯрдирд╛ рд▓рдХреНрд╖реНрдп рдпрд╛ рд▓рдХреНрд╖реНрдп рддрддреНрд╡ (event.target) рдХреНрдпрд╛ рд╣реИ?


рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, event.target рд╡рд╣ рддрддреНрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛ рд╡рд╣ рддрддреНрд╡ рдЬреЛ рдШрдЯрдирд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рд░реНрдХрдЕрдк рд╣реИрдВ:

<div onclick="clickFunc(event)" style="text-align: center; margin: 15px;
border: 1px solid red; border-radius: 3px;">
    <div style="margin: 25px; border: 1px solid royalblue; border-radius: 3px;">
        <div style="margin: 25px; border: 1px solid skyblue; border-radius: 3px;">
            <button style="margin: 10px">
                Button
            </button>
        </div>
    </div>
</div>

рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЬреЗрдПрд╕:

function clickFunc(event) {
    console.log(event.target)
}

рд╣рдордиреЗ рдмрд╛рд╣рд░реА рд╢реНрд░реЛрддрд╛ рдХреЗ рд▓рд┐рдП "рд╢реНрд░реЛрддрд╛" рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрд╕ рдмрдЯрди рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рд╡рд╛рд▓рд╛ рддрддреНрд╡ рд╕реНрд╡рдпрдВ рдмрдЯрди рд╣реИ, рди рдХрд┐ рдмрд╛рд╣рд░реА рдпрд╛ рдЖрдВрддрд░рд┐рдХ divsред

13. рдШрдЯрдирд╛ рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЙрджреНрджреЗрд╢реНрдп (Event.currentTarget) рдХреНрдпрд╛ рд╣реИ?


Event.currentTarget рд╡рд╣ рддрддреНрд╡ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рд╕рдВрд▓рдЧреНрди рд╣реИред

рд╕рдорд╛рди рдорд╛рд░реНрдХрдЕрдк:

<div onclick="clickFunc(event)" style="text-align: center;margin:15px;
border:1px solid red;border-radius:3px;">
    <div style="margin: 25px; border:1px solid royalblue;border-radius:3px;">
        <div style="margin:25px;border:1px solid skyblue;border-radius:3px;">
            <button style="margin:10px">
                Button
            </button>
        </div>
    </div>
</div>

рдФрд░ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд JS:

function clickFunc(event) {
    console.log(event.currentTarget)
}

рд╣рдордиреЗ рд╢реНрд░реЛрддрд╛ рдХреЛ рдмрд╛рд╣рд░реА div рд╕реЗ рдЬреЛрдбрд╝рд╛ред рд╣рдо рдЬрд╣рд╛рдВ рднреА рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдХ рдмрдЯрди рд╣реЛ рдпрд╛ рдЖрдВрддрд░рд┐рдХ divs рдореЗрдВ рд╕реЗ рдПрдХ, рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдмрд╛рд╣рд░реА div рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ event.currentTarget рд╡рд╣ рддрддреНрд╡ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

14. рдСрдкрд░реЗрдЯрд░ "==" рдФрд░ "===" рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рдСрдкрд░реЗрдЯрд░ == (рд╕рд╛рд░ рдпрд╛ рдЧреИрд░-рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛) рдФрд░ рдСрдкрд░реЗрдЯрд░ === (рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛) рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (Coersion), рдФрд░ рджреВрд╕рд░рд╛ - рдРрд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд┐рдирд╛ ред

рдЪрд▓реЛ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░реЗрдВред рдФрд░ рдкрд╣рд▓реЗ, рдЪрд▓реЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рд╕реА рдорд╛рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдореЗрдВ, рдпрд╛ рдмрд▓реНрдХрд┐, рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рддреБрд▓рдирд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХреЛ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╕рдордп, рдСрдкрд░реЗрдЯрд░ "==" рддрдерд╛рдХрдерд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддреБрд▓рдирд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд░ "==" рджреЛ рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо x рдФрд░ y рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рдпрджрд┐ x рдФрд░ y рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВ, рддреЛ рддреБрд▓рдирд╛ "===" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИред
  2. x = null y = undefined true.
  3. x = undefined y = null true.
  4. x = , y = , x == toNumber(y) ( y ).
  5. x = , y = , toNumber(x) == y ( x ).
  6. x = , toNumber(x) == y.
  7. y = , x == toNumber(y).
  8. x = , , y = , x == toPrimitive(y) ( y ).
  9. x = , y = , , toPrimitive(x) == y.
  10. false.

рдпрд╛рдж рд░рдЦреЗрдВ: рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ "рдЖрджрд┐рдо" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, thePrimitive рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ valueOf рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдлрд┐рд░ рд╕реНрдЯреЛрдХреНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ред

рдЙрджрд╛рд╣рд░рдг:



рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕рд╣реА рд╣реИрдВред

рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдкрд╣рд▓реА рд╢рд░реНрдд рд╣реИред
рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЪреМрдереА рд╕реНрдерд┐рддрд┐ рд╣реИред
рддреАрд╕рд░рд╛ рджреВрд╕рд░рд╛ рд╣реИред
рдЪреМрдерд╛ рд╕рд╛рддрд╡рд╛рдБ рд╣реИред
рдкрд╛рдВрдЪрд╡рд╛рдВ - рдЖрдард╡рд╛рдВред
рдФрд░ рдЖрдЦрд┐рд░реА рджрд╕рд╡реАрдВ рд╣реИред



рдпрджрд┐ рд╣рдо "===" рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЭреВрдареЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдорд╛рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред

15. рджреЛ рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧрд▓рдд рдХреНрдпреЛрдВ рд╣реИ?


let a = {
    a: 1
}
let b = {
    a: 1
}
let c = a

console.log(a === b) // false
console.log(a === c) // true ...

рдЬреЗрдПрд╕ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЖрджрд┐рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреА рдЬрд╛рддреА рд╣реИред рдЖрджрд┐рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдореВрд▓реНрдп рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ - рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрджрд░реНрдн рдпрд╛ рдкрддреЗ рд╕реЗ рдЬрд╣рд╛рдВ рдЪрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдЭреВрдареЗ рдФрд░ рджреВрд╕рд░рд╛ рд░рд┐рдЯрд░реНрди рд╕рд╣реА рд╣реИред рдЪрд░ "рдП" рдФрд░ "рд╕реА" рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЪрд░ "рдП" рдФрд░ "рдмреА" рд╕рдорд╛рди рдЧреБрдгреЛрдВ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

16. рдСрдкрд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИ "!!" рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


рдкрд░рд┐рдЪрд╛рд▓рдХ "!!" (double negation) рдореВрд▓реНрдп рдХреЛ рдЙрд╕рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдореВрд▓реНрдп рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рддрдХ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

console.log(!!null) // false
console.log(!!undefined) // false
console.log(!!'') // false
console.log(!!0) // false
console.log(!!NaN) // false
console.log(!!' ') // true
console.log(!!{}) // true
console.log(!![]) // true
console.log(!!1) // true
console.log(!![].length) // false

17. рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдХрдИ рднрд╛рд╡ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ?


рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдСрдкрд░реЗрдЯрд░ "," (рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ "рдЪрд╛рд▓" рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдСрдкрд░реЗрдВрдб рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

let x = 5

x = (x++, x = addFive(x), x *= 2, x -= 5, x += 10)

function addFive(num) {
    return num + 5
}

рдпрджрд┐ рд╣рдо рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП x рдХрд╛ рдорд╛рди рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 27 рдорд┐рд▓рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо x рдХрд╛ рдорд╛рди рдПрдХ (x = 6) рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ 6 рдХреЗ рд╕рд╛рде addFive () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо 5 (x = 11) рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо x рдХрд╛ рдорд╛рди 2 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ (x = 22)ред рдлрд┐рд░ 5 рдШрдЯрд╛рдПрдВ (x = 17)ред рдФрд░ рдЕрдВрдд рдореЗрдВ, 10 (x = 27) рдЬреЛрдбрд╝реЗрдВред

18. рдХреНрдпрд╛ рдлрд╣рд░рд╛ рд░рд╣рд╛ рд╣реИ?


рд▓рд┐рдлреНрдЯ рдПрдХ рд╢рдмреНрдж рд╣реИ рдЬреЛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджрд╛рдпрд░реЗ рдореЗрдВ рдПрдХ рдЪрд░ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрджрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдЙрддреНрдерд╛рдкрди рдХреНрдпрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреНрдпрд╛ рд╣реИред

рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рд╡рд╣ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреЗ рджреЛ рдЪрд░рдг рд╣реИрдВ - рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрд╡рдпрдВред

рд╕рдВрдХрд▓рдиред рдЗрд╕ рдЪрд░рдг рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рдЪрд░ "рд╡реИрд░рд┐рдПрдмрд▓" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡реИрд╢реНрд╡рд┐рдХ (рдпрд╛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ) рджрд╛рдпрд░реЗ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реГрджреНрдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдШреЛрд╖рдгрд╛рдПрдБ - рд▓рдЧрднрдЧред

рдкреНрд░рджрд░реНрд╢рдиред рдЗрд╕ рдЪрд░рдг рдореЗрдВ, рдЪрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рддрд░реАрдХреЗ) рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ: рдХреЗрд╡рд▓ '' '' '' '' '' '' '' '' '' '' '' '' рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╡ рдФрд░ рдЪрд░ рд╣реА рдЙрдард╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╕рд╛рде рд╣реА рдХреАрд╡рд░реНрдб "рд▓реЗрдЯ" рдФрд░ "рдХреЙрдиреНрд╕реНрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рд╣реИ:

console.log(y)
y = 1
console.log(y)
console.log(greet('Mark'))

function greet(name) {
    return 'Hello ' + name + '!'
}

var y

рд╣рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, 1 рдФрд░ 'рд╣реИрд▓реЛ рдорд╛рд░реНрдХ!'ред

рдпрд╣рд╛рдБ рд╕рдВрдХрд▓рди рдЪрд░рдг рдХреНрдпрд╛ рд╣реИ:

function greet(name) {
    return 'Hello ' + name + '!'
}

var y //  undefined

//    

//    
/*
console.log(y)
y = 1
console.log(y)
console.log(greet('Mark'))
*/

рд╕рдВрдХрд▓рди рдЪрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рд╖реНрдкрд╛рджрди рдЪрд░рдг рддрдм рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдорд╛рди рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВред

рдЙрддреНрдерд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ред

19. рдПрдХ рд╕реНрдХреЛрдк рдХреНрдпрд╛ рд╣реИ?


рдПрдХ рд╕реНрдХреЛрдк рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ (рдпрд╛ рдЬрд╣рд╛рдВ рд╕реЗ) рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд░ рдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдЬреЗрдПрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдХреЛрдк рд╣реИрдВ: рд╡реИрд╢реНрд╡рд┐рдХ, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдмреНрд▓реЙрдХ (рдИрдПрд╕ 6)ред

рдЧреНрд▓реЛрдмрд▓ рд╕реНрдХреЛрдк - рд╡реИрд░рд┐рдПрдмрд▓ рдФрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рдлрдВрдХреНрд╢рди рдХрд╛ рдЧреНрд▓реЛрдмрд▓ рд╕реНрдХреЛрдк рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

//   
var g = 'global'

function globalFunc() {
    function innerFunc() {
        console.log(g) //     g,    
    }
    innerFunc()
}

рдлрдВрдХреНрд╢рдирд▓ рд╕реНрдХреЛрдк (рдПрдХ рдлрдВрдХреНрд╢рди рдХрд╛ рд╕реНрдХреЛрдк) - рдХрд┐рд╕реА рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕, рдлрдВрдХреНрд╢рди рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рдлрдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВред

function myFavouriteFunc(a) {
    if (true) {
        var b = 'Hello ' + a
    }
    return b
}
myFavouriteFunc('World')

console.log(a) // Uncaught ReferenceError: a is not defined
console.log(b) //  

рдмреНрд▓реЙрдХ рд╕реНрдХреЛрдк - рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ (рдмреНрд▓реЙрдХ "({}) рдХреЗ рдЕрдВрджрд░" рд▓реЗрдЯ "рдФрд░" рдХреЙрдиреНрд╕реНрдЯреЗрдмрд▓ "рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

function testBlock() {
    if (true) {
        let z = 5
    }
    return z
}

testBlock() // Uncaught ReferenceError: z is not defined

рдПрдХ рджрд╛рдпрд░рд╛ рднреА рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЪрд░ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЪрд░ рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЦреЛрдЬ рд╡рд░реНрддрдорд╛рди рдХреНрд╖реЗрддреНрд░ рдХреА рдмрд╛рд╣рд░реА рджреГрд╢реНрдпрддрд╛ рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреА рд╣реИред рдпрджрд┐ рдмрд╛рд╣рд░реА рджрд╛рдпрд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЦреЛрдЬ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рддрдХ рдЬрд╛рд░реА рд╣реИред рдпрджрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдПрдХ рдЪрд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦреЛрдЬ рдХреЛ рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдпрддрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдирд┐рдХрдЯ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЪрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд╕рд╛рде рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдХреЛрдк рдЪреЗрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

//   
//    ->    ->   

//   
var variable1 = 'Comrades'
var variable2 = 'Sayonara'

function outer() {
    //   
    var variable1 = 'World'

    function inner() {
        //   
        var variable2 = 'Hello'
        console.log(variable2 + ' ' + variable1)
    }
    inner()
}
outer()
//    'Hello World',
//   variable2 = 'Hello'  variable1 = 'World'  
//     



20. рдХреНрд▓реЛрдЬрд░ (рдХреНрд▓реЛрдЬрд░) рдХреНрдпрд╛ рд╣реИ?


рдпрд╣ рд╢рд╛рдпрдж рд╕реВрдЪреА рд╕реЗ рд╕рдмрд╕реЗ рдХрдард┐рди рд╕рд╡рд╛рд▓ рд╣реИред рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдмрдВрдж рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдВрдж рдХрд░рдирд╛ рд╕реГрдЬрди рдХреЗ рд╕рдордп рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдореЗрдВ рд╕реНрдерд┐рдд рдЪрд░ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рдореВрд▓ рдХрд╛рд░реНрдп рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ, рдореВрд▓ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЧреБрдВрдЬрд╛рдЗрд╢ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдкрд░ред рдЖрдорддреМрд░ рдкрд░, рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрдХреЛрдк рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреНрд▓реЛрдЬрд░ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ:

//   
var globalVar = 'abc'

function a() {
    //   
    console.log(globalVar)
}

a() // 'abc'
//   
//    a ->   

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрдм рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред



"GlobalVar" рд╡реИрд░рд┐рдПрдмрд▓ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛рдБ рдФрд░ рдХрдм рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, GlobalVar рдХрд╛ рдорд╛рди "abc" рд╣реЛрдЧрд╛ред

рдЕрдм рдЙрджрд╛рд╣рд░рдг рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ:

var globalVar = 'global'
var outerVar = 'outer'

function outerFunc(outerParam) {
    function innerFunc(innerParam) {
        console.log(globalVar, outerParam, innerParam)
    }
    return innerFunc
}

const x = outerFunc(outerVar)
outerVar = 'outer-2'
globalVar = 'guess'
x('inner')



рдкрд░рд┐рдгрд╛рдо "рдмрд╛рд╣рд░реА рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрдорд╛рди" рд╣реИред рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдпрд╣ рд╣реИ: рдЬрдм рд╣рдо рдЖрдЙрдЯрд░рдлрдВрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдирд░рдлрдВрдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЗ рд▓рд┐рдП рдЪрд░ "x" рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ "рдЖрдЙрдЯрд░рдкрд░рдо" "рдмрд╛рд╣рд░реА" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдордиреЗ рдЪрд░ "рдмрд╛рд╣рд░реА рд╡реАрд░" рдХреЛ "рдмрд╛рд╣рд░реА -2" рдХреЛ рд╕реМрдВрдкрд╛ рд╣реИ, рдпрд╣ рдмрд╛рд╣рд░реА рдлрдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реБрдЖ рд╣реИ, рдЬреЛ рдХрд┐ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ "рдмрд╛рд╣рд░реА" рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП "рдкреНрд░рдмрдВрдзрд┐рдд" рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдорд╛рди "рдмрд╛рд╣рд░реА" рдерд╛ред рдЬрдм рд╣рдо "рдПрдХреНрд╕" рдХрд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирд░рдлрдВрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ "рдЗрдирд░рдкрд╛рд░рдо" рдХрд╛ рдореВрд▓реНрдп "рдЗрдирд░" рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо "рдПрдХреНрд╕" рдХрд╣рддреЗ рд╕рдордп рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдорд╛рди рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред GlobalVar рдХрд╛ рдореВрд▓реНрдп "рдЕрдиреБрдорд╛рди" рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ "x" рдХрд╣рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕ рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИред

рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдХреА рдЧрд▓рддрдлрд╣рдореА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред

const arrFunc = []
for (var i = 0; i < 5; i++) {
    arrFunc.push(function() {
        return i
    })
}
console.log(i) // 5

for (let i = 0; i < arrFunc.length; i++) {
    console.log(arrFunc[i]()) //  5
}

рдпрд╣ рдХреЛрдб рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡реИрд░ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдЗрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдмрдирд╛рддрд╛ рд╣реИред ArrFunc рд╕рд░рдгреА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ "i" рдХрд╛ рдорд╛рди "5" рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ "i" рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдПрдХ рдмрдВрдж рдПрдХ рдЪрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рд╕реГрдЬрди рдХреЗ рд╕рдордп рдкрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВред IIFE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ "let" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ

рдмрдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред

21. рдЬреЗрдПрд╕ рдореЗрдВ рдХреМрди рд╕реЗ рдореВрд▓реНрдп рдЭреВрдареЗ рд╣реИрдВ?


const falsyValues = ['', 0, null, undefined, NaN, false]

рдЧрд▓рдд рд╡реЗ рдореВрд▓реНрдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдЧрд▓рдд рд╣реИред

22. рдЕрдЧрд░ рдПрдХ рдореВрд▓реНрдп рдЧрд▓рдд рд╣реИ рддреЛ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ?


рдмреБрд▓рд┐рдпрди рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ "!!" (рджреЛ рдмрд╛рд░ рдирд╣реАрдВ)ред

23. рдЙрдкрдпреЛрдЧ рд╕рдЦреНрдд рдирд┐рд░реНрджреЗрд╢ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


"рд╕рдЦреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рдПрдХ ES5 рдирд┐рд░реНрджреЗрд╢ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рдХреЛрдб рдпрд╛ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдХреЛ рд╕рдЦреНрдд рдореЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдЦреНрдд рдореЛрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╕рдЦреНрдд рдореЛрдб рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВред

рдЖрдк рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдпрд╛ рдЕрдШреЛрд╖рд┐рдд рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ:

function returnY() {
    'use strict'
    y = 123
    return y
}
returnY() // Uncaught ReferenceError: y is not defined

рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╡рд░реНрдЬрд┐рдд рд╣реИ:

'use strict'
var NaN = NaN // Uncaught TypeError: Cannot assign to read only property 'NaN' of object '#<Window>'
var undefined = undefined
var Infinity = 'and beyond'

рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА "рдирд╛рдпрд╛рдм" рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ:

'use strict'
const obj = {}

Object.defineProperties(obj, 'x', {
    value: 1
})

delete obj.x // Uncaught TypeError: Property description must be an object: x

рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рджреЛрд╣рд░рд╛рд╡ рдирд┐рд╖рд┐рджреНрдз рд╣реИ:

'use strict'

function someFunc(a, b, b, c) {} // Uncaught SyntaxError: Duplicate parameter name not allowed in this context

рдЖрдк eval рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

'use strict'

eval('var x = 1')

console.log(x) // Uncaught ReferenceError: x is not defined

рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ:

'use strict'

function showMeThis() {
    return this
}

showMeThis() // undefined

тАж рдЖрджрд┐ред

24. рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?


рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред "рдЕрднреА" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

const carDetails = {
    name: 'Ford Mustang',
    yearBought: 2005,
    getName() {
        return this.name
    }
    isRegistered: true
}

console.log(carDetails.getName()) // Ford Mustang

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, getName рд╡рд┐рдзрд┐ рдЗрд╕ .рдирд╛рдо рдХреЛ рд▓реМрдЯрд╛ рджреЗрддреА рд╣реИ, рдФрд░ рдпрд╣ carDetails рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ getName рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХрд╛ "рд╕реНрд╡рд╛рдореА" рд╣реИред

рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреЗ рдмрд╛рдж рддреАрди рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:

var name = 'Ford Ranger'
var getCarName = carDetails.getName

console.log(getCarName()) // Ford Ranger

рджреВрд╕рд░рд╛ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдПрдХ рдлреЛрд░реНрдб рд░реЗрдВрдЬрд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЬреАрдм рд╣реИред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ getCarName рдХрд╛ "рд╕реНрд╡рд╛рдореА" рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рд╡реИрд░рд┐рдПрдмрд▓ рд╕реНрдХреЛрдк рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдпрд╣ рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдЦреНрдд рдореЛрдб рдирд╣реАрдВ рд╣реИ)ред

console.log(getCarName === window.getCarName) // true
console.log(getCarName === this.getCarName) // true

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдФрд░ рд╡рд┐рдВрдбреЛ рд╕рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдХреЙрд▓ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ:

console.log(getCarName.apply(carDetails)) // Ford Mustang
console.log(getCarName.call(carDetails)) // Ford Mustang

рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдВ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╣реЛрдЧрд╛ред

IIFE рдореЗрдВ, рд╡реЗ рдХрд╛рд░реНрдп рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕, рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред

(function() {
    console.log(this)
})() // window

function iHateThis() {
    console.log(this)
}
iHateThis() // window

const myFavouriteObj = {
    guessThis() {
        function getName() {
            console.log(this.name)
        }
        getName()
    },
    name: 'Marko Polo',
    thisIsAnnoying(callback) {
        callback()
    }
}

myFavouriteObj.guessThis() // window
myFavouriteObj.thisIsAnnoying(function() {
    console.log(this) // window
})

рдорд╛рд░реНрдХреЛ рдкреЛрд▓реЛ рдкрд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдЪрд░ рдореЗрдВ рдЗрд╕ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const myFavoriteObj = {
    guessThis() {
        const self = this //   this   self
        function getName() {
            console.log(self.name)
        }
        getName()
    },
    name: 'Marko Polo',
    thisIsAnnoying(callback) {
        callback()
    }
}

рджреВрд╕рд░реЗ, рд╣рдо рдПрд░реЛ рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const myFavoriteObj = {
    guessThis() {
        const getName = () => {
            //   this   
            console.log(this.name)
        }
        getName()
    },
    name: 'Marko Polo',
    thisIsAnnoying(callback) {
        callback()
    }
}

рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рдпрд╣ рд╕реНрд╡рджреЗрд╢реА рдирд╣реАрдВ рд╣реИред рд╡реЗ рдмрд╛рд╣рд░реА рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдЗрд╕рдХреЗ рдЕрд░реНрде рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВред

25. рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреНрдпрд╛ рд╣реИ?


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдПрдХ рд╡рд╕реНрддреБ рдХреА рдПрдХ рдпреЛрдЬрдирд╛ (рдЖрд░реЗрдЦ рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛) рд╣реИред рдпрд╣ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдордмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдЧреБрдгреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рд╣реИред рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред

const o = {}
console.log(o.toString()) // [object Object]

рд╣рд╛рд▓рд╛рдВрдХрд┐ "рдУ" рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдЯрд░реНрд▓рд┐рдВрдЧ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕рдХреА рдЦреЛрдЬ рдкрд╣рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЬрдм рддрдХ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред рдЗрд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЪреЗрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ Object.prototype рд╣реИред

console.log(o.toString === Object.prototype.toString) // true

рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред

26. IIFE рдХреНрдпрд╛ рд╣реИ?


IIFE рдпрд╛ рддреБрд░рдВрдд рдЗрдирд╡реЙрдЗрд╕ рдлрдВрдХреНрд╢рди рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдПрдХ рдРрд╕рд╛ рдлрдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдпрд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмреБрд▓рд╛рдпрд╛ рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред IIFE рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЛрд╖реНрдардХ (рд╕рдореВрд╣ рд╕рдВрдЪрд╛рд▓рдХ) рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕реЗ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: (рдлрд╝рдВрдХреНрд╢рди () {}) ()ред

(function( ) { }( ))

(function( ) { })( )

(function named(params) { })( )

(( ) => { })

(function(global) { })(window)

const utility = (function( ) {
    return {
        // 
    }
})

рдпреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдорд╛рдиреНрдп рд╣реИрдВред рдкреНрд░рдЪрд▓рд┐рдд рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдо IIFE рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо IIFE рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

IIFE рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдХреЛрдк рдореЗрдВ рдкреНрд░рджреВрд╖рдг (рдЧреНрд▓реЛрдмрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд╛ рдкреНрд░рджреВрд╖рдг) рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдХреЛ рд░реЛрдХрдирд╛ рд╣реИред рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред

<script src="https://cdnurl.com/somelibrary.js"></script>

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ somelibrary.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬреЛ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ, createGraph рдФрд░ drawGraph, рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВред рдФрд░ рд╣рдо рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ:

<script src="https://cdnurl.com/somelibrary.js"></script>
<script>
    function createGraph() {
        // 
    }

    function drawGraph() {
        // 
    }
</script>

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдмрджрд▓ рд░рд╣рд╛ рд╣реИ:

<script src="https://cdnurl.com/somelibrary.js"></script>
<script>
    function myCreateGraph() {
        // 
    }

    function myDrawGraph() {
        // 
    }
</script>

рддреАрд╕рд░рд╛ рддрд░реАрдХрд╛ IIFE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

<script>
    const graphUtility = (function() {
        function createGraph() {
            // 
        }

        function drawGraph() {
            // 
        }
        return {
            createGraph,
            drawGraph
        }
    })
</script>

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЪрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ IIFE рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ createGraph рдФрд░ drawGraph рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ IIFE рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

val li = document.querySelectorAll('.list-group > li')
for (var i - 0, len = li.length; i < len; i++) {
    li[i].addEventListener('click', function(e) {
        console.log(i)
    })
}

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реВрдЪреА-рд╕рдореВрд╣ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 5 рдмрд╛рд▓ рддрддреНрд╡ рд▓реА рд╣реИрдВред рдФрд░ рд╣рдо рдПрдХ рдЕрд▓рдЧ "рд▓реА" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╕рдордп рдХрдВрд╕реЛрд▓ рдореЗрдВ "i" рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдХрдВрд╕реЛрд▓ рд╣рдореЗрд╢рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рджреЛрд╖ рд╕рднреА рджреЛрд╖ рд╣реИред

рдПрдХ рд╕рдорд╛рдзрд╛рди IIFE рд╣реИ:

var li = document.querySelectorAll('.list-group > li')
for (var i = 0, len = li.length; i < len; i++) {
    (function(currentIndex) {
        li[currentIndex].addEventListener('click', function(e) {
            console.log(currentIndex)
        })
    })(i)
}

рдпрд╣ рдХреЛрдб рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ IIFE рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо currentIndex рдореЗрдВ "i" рдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВред

27. Function.prototyp.apply рд╡рд┐рдзрд┐ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ?


рд▓рд╛рдЧреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рди рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

const details = {
    message: 'Hello World!'
}

function getMessage() {
    return this.message
}

getMessage.apply(details) // Hello World!

рдпрд╣ рд╡рд┐рдзрд┐ Function.prototyp.call рдХреЗ рд╕рдорд╛рди рд╣реИред рдлрд░реНрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ, рддрд░реНрдХ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

const person = {
    name: 'Marko Polo'
}

function greeting(greetingMessage) {
    return `${greetingMessage} ${this.name}`
}

greeting.apply(person, ['Hello']) // Hello Marko Polo

28. function.prototype.call рд╡рд┐рдзрд┐ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ?


рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

const details = {
    message: 'Hello World!'
};

function getMessage() {
    return this.message;
}

getMessage.call(details); // Hello World!

рдпрд╣ рддрд░реАрдХрд╛ рдлрдВрдХреНрд╢рди.рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк.apply рдЬреИрд╕рд╛ рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЙрд▓ рддрд░реНрдХреЛрдВ рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

const person = {
    name: 'Marko Polo'
};

function greeting(greetingMessage) {
    return `${greetingMessage} ${this.name}`;
}

greeting.call(person, 'Hello'); // Hello Marko Polo

29. рдХреЙрд▓ рдФрд░ рдЕрдкреНрд▓рд╛рдИ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рдХреЙрд▓ рдФрд░ рдЕрдкреНрд▓рд╛рдИ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреЙрд▓ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ, рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЙрд▓ рдореЗрдВ, рдХреЙрдорд╛ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

const obj1 = {
    result: 0
}

const obj2 = {
    result: 0
}

function reduceAdd() {
    let result = 0
    for (let i = 0, len = arguments.length; i < len; i++) {
        result += arguments[i]
    }
    this.result = result
}

reduceAdd.apply(obj1, [1, 2, 3, 4, 5]) // 15
reduceAdd.call(obj2, 1, 2, 3, 4, 5) // 15

30. function.prototyp.bind рд╡рд┐рдзрд┐ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ?


Bind рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдпрд╣ рдорд╛рди рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рдмрд╛рдЗрдВрдб рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рддреБрд░рдВрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред

import React from 'react'

class MyComponent extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            value: ''
        }
        this.handleChange = this.handleChange.bind(this)
        //   handleChange   MyComponent
    }

    handleChange(e) {
        // 
    }

    render() {
        return ( < >
            <
            input type = {
                this.props.type
            }
            value = {
                this.state.value
            }
            onChange = {
                this.handleChange
            }
            /> </ >
        )
    }
}

31. рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЬреЗрдПрд╕ рдХреА рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ?


рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдШреЛрд╖рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрд╡рдзрд╛рд░рдгрд╛ рдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдкреИрдЯрд░реНрди) рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреИрд╕реЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрди рддрд░реНрдХреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдРрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореИрдк, рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЙрдирдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рд╡реЗ рд╕рд░рдгреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рд╕рд╛рдл" рдХрд░рддрд╛ рд╣реИред JS рдореЗрдВ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдФрд░ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рднреА рд╣реИрдВ рдЬреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред

рдирдХреНрд╢рд╛ рд╡рд┐рдзрд┐ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ:

const words = ['Functional', 'Procedural', 'Object-Oriented']

const wordsLength = words.map(word => word.length)

рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕рд░рдгреА рдмрдирд╛рддреА рд╣реИ:

const data = {
    {
        name: 'Mark',
        isRegistered: true
    } {
        name: 'Mary',
        isRegistered: false
    } {
        name: 'Mae',
        isRegistered: true
    }
}

const registeredUsers = data.filter(user => user.isRegistered)

рдХрдо рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдХреЙрд▓рдмреИрдХ рдХрд░рддреА рд╣реИ, voids рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЪрд╛рд░ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп (рдпрд╛ рдкрд┐рдЫрд▓реЗ рдХреЙрд▓рдмреИрдХ рд╕реЗ рдореВрд▓реНрдп), рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХрд╛ рдореВрд▓реНрдп, рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕рд░рдгреА:

const strs = ['I', ' ', 'am', ' ', 'Iron', ' ', 'Man']

const result = strs.reduce((acc, currentStr) => acc + str, '')

32. рдЙрдЪреНрдЪрддрд░ рдХреНрд░рдо рдХреЗ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд╣реИрдВ?


рдПрдХ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

function higherOrderFunction(param, callback) {
    return callback(param)
}

33. рдЬреЗрдПрд╕ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд╡рд╕реНрддреБ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?


рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд╡рд╕реНрддреБрдПрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЬреЗрдПрд╕ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдореВрд▓реНрдп рдХреА рддрд░рд╣ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рд╡рд╕реНрддреБ (рд╡рд┐рдзрд┐) рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдПрдХ рд╕рд░рдгреА рдХрд╛ рдПрдХ рддрддреНрд╡, рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ, рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдореВрд▓реНрдпред рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдореВрд▓реНрдп рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдпрд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

34. рдЖрдк Array.prototype.map рдкрджреНрдзрддрд┐ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?


function map(arr, mapCallback) {
    //   
    if (!Array.isArray(arr) || !arr.length || typeof mapCallback !== 'function') {
        return []
    } else {
        let result = []
        //         
        //       
        for (let i = 0, len = arr.length; i < len; i++) {
            result.push(mapCallback(arr[i], i, arr))
            //   mapCallback  result
        }
        return result
    }
}

рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИред

35. рдЖрдк Array.prototype.filter рдкрджреНрдзрддрд┐ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?


function filter(arr, filterCallback) {
    //   
    if (!Array.isArray(arr) || !arr.length || typeof filterCallback !== 'function') {
        return []
    } else {
        let result = []
        // ...
        for (let i = 0, len = arr.length; i < len; i++) {
            //      
            if (filterCallback(arr[i], i, arr)) {
                //  ,  ,  result
                result.push(arr[i])
            }
        }
        return result
    }
}

рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд┐рдзрд┐ рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рдмрдирд╛рддреА рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдереЗред

36. рдЖрдк Array.prototype.reduce рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?


function reduce(arr, reduceCallbak, initialValue) {
    // ..
    if (!Array.isArray(arr) || !arr.length || typeof filterCallback !== 'function') {
        return []
    } else {
        //        initialValue, 
        let hasInitialValue = initialValue !== undefined
        let value = hasInitialValue ? initialValue : arr[0]
        //      initialValue

        //    ,   1,       initialValue,   0,    
        for (let i = hasInitialValue ? 0 : 1, len = arr.length; i < len; i++) {
            //         reduceCallback 
            value = reduceCallback(value, arr[i], i, arr)
        }
        return value
    }
}

рдХрдо рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдПрд░реЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ (рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ) рдкрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдорд╛рди рд╣реЛрддрд╛ рд╣реИред

37. рдПрдХ рддрд░реНрдХ рд╡рд╕реНрддреБ рдХреНрдпрд╛ рд╣реИ?


рддрд░реНрдХ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдпрд╣ рдПрдХ рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБ рд╣реИ, рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рд╣рдо рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ [i], рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ forEach, рдХрдо, рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк Array.prototype.slice рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

Array.prototype.slice.call(arguments)

рдпрд╛рдж рд░рдЦреЗрдВ: рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

function one() {
    return arguments
}
const two = function() {
    return arguments
}
const three = function three({
    return arguments
})
const four = () => arguments

four() // arguments is not defined

рдПрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛: рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рд╢реЗрд╖ рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

const four = (...args) => args

рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦреЗрдЧрд╛ред

38. рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рди рд╣реЛ?


рдпрд╣ Object.create рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

const o1 = {}
console.log(o1.toString) // [object Object]

const o2 = Object.create(null) //      Object-create  -
//    -,   null
console.log(o2.toString) // o2.toString is not a function

39. рдкреНрд░рд╕реНрддреБрдд рдХреЛрдб рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ рдмреА рдХреНрдпреЛрдВ рдмрдирддрд╛ рд╣реИ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?



function myFunc(){
    let a = b = 0
}
myFunc()

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ ("=") рдореЗрдВ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреА рд╕рдорд░реВрдкрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддред рджрд╛рдИрдВ рд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:

function myFunc(){
    let a = (b = 0)
}
myFunc()

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдорд╛рди 0 рдХреЛ рдЪрд░ "рдмреА" рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдмрдирд╛рддрд╛ рд╣реИред рдорд╛рди (0) b = 0 рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ "a" рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

function myFunc(){
    let a, b
    a = b = 0
}
myFunc()

40. ECMAScript рдХреНрдпрд╛ рд╣реИ?


ECMAScript рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╣реИ, рдПрдХ рдорд╛рдирдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ, рдпрд╣ JS рдХрд╛ рдЖрдзрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП ECMAScript рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди JS рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

ECMA-262 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

41. ES6 рдпрд╛ ECMAScript2015 рдиреЗ рдЬреЗрдПрд╕ рдореЗрдВ рдХреНрдпрд╛ рдирдИ рдЪреАрдЬреЗрдВ рд▓рд╛рдИрдВ?


  • рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕
  • рдХрдХреНрд╖рд╛рдПрдВ
  • рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ред
  • рд╕рдВрд╡рд░реНрдзрд┐рдд рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ
  • рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА (рд╡рд╕реНрддреБ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА)ред
  • рд╡рд╛рджреЗ (рд╡рд╛рджреЗ)ред
  • рдЬреЗрдирд░реЗрдЯрд░
  • рдореЙрдбреНрдпреВрд▓
  • рдкреНрд░рддреАрдХред
  • рдкреНрд░реЙрдХреНрд╕реА
  • рд╕реЗрдЯред
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкред
  • рдЖрд░рд╛рдо рдХрд░реЛ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдлреИрд▓рд╛рдУред
  • рдмреНрд▓реЙрдХ рд╕реНрдХреЛрдк (рдХреАрд╡рд░реНрдб "рд▓реЗрдЯ" рдФрд░ "рдХреЙрдиреНрд╕реНрдЯ")ред

42. "var", "let" рдФрд░ "const" рдХреАрд╡рд░реНрдб рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рд╡реИрд░ рдХреАрд╡рд░реНрдб рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдШреЛрд╖рд┐рдд рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рд╕реБрд▓рдн рд╣реИрдВ:

function giveMeX(showX){
    if(showX){
        var x = 5
    }
    return x
}

console.log(giveMeX(false))
console.log(giveMeX(true))

рдкрд╣рд▓реЗ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛, рджреВрд╕рд░рд╛ - 5. рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдореЗрдВ рдЙрднрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд░ "x" рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

function giveMeX(showX){
    var x //   undefined
    if(showX){
        x = 5
    }
    return x
}

рдкрд╣рд▓реЗ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдШреЛрд╖рд┐рдд рдЪрд░ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЛрдИ рдорд╛рди рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред

"рд▓реЗрдЯ" рдФрд░ "рдХреЙрдиреНрд╕реНрдЯ" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореЗрдВ рдмреНрд▓реЙрдХ рд╕реНрдХреЛрдк рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдмреНрд▓реЙрдХ ({}) рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

function giveMeX(showX){
    if(showX){
        let x = 5
    }
    return x
}

function giveMeY(showY){
    if(showY){
        let y = 5
    }
    return y
}

рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЭреВрдареЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рддреНрд░реБрдЯрд┐ рд╣реЛ рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдЪрд░ "x" рдФрд░ "y" рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ (рдкреЙрдк рдЕрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

"рд▓реЗрдЯ" рдФрд░ "рдХреЙрдиреНрд╕реНрдЯ" рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдХреЗ рдорд╛рди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ - рдирд╣реАрдВ (рд╕реНрдерд┐рд░)ред рдЙрд╕реА рд╕рдордп, рд╣рдо const рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реНрд╡рдпрдВ (рдЪрд░) рдирд╣реАрдВред

43. рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕) рдХреНрдпрд╛ рд╣реИрдВ?


рдЬреЗрдПрд╕ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рддреЗрдЬрд╝ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВред рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, "рдлрд╝рдВрдХреНрд╢рди" рд╢рдмреНрдж рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ:

// ES5
var getCurrentDate = function(){
    return new Date()
}

// ES6
const getCurrentDate = () => new Date()

рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдЯрд░реНрди рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдмрд╢рд░реНрддреЗ рдХрд┐ рд╣рдо рдПрдХрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдорд╛рди рд▓реМрдЯрд╛рдПрдБ:

// ES5
function greet(name){
    return 'Hello ' + name + '!' 
}

// ES6
const greet = (name) => `Hello ${name}`
const greet2 = name = > `Hello ${name}`

рд╣рдо рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛:

const getArgs = () => arguments

const getArgs2 = (...rest) => rest

рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╛рдХреА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

const data = {
    result: 0
    nums: [1,2,3,4,5]
    computeResult(){
        // this    data
        const addAll = () => {
        //     this   
        return this.nums.reduce((total, cur) => total + cur, 0)
        }
    this.result = addAll()
    }
}

44. рд╡рд░реНрдЧ рдХреНрдпрд╛ рд╣реИрдВ?


рдХрдХреНрд╖рд╛рдПрдВ JS рдореЗрдВ рд░рдЪрдирд╛рдХрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реИред рдХрдХреНрд╖рд╛рдПрдВ рдПрдХ рд╣реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рд░рд╛рд╕рдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ:

// ES5
function Person(firstName, lastName, age, address){
    this.firstName = firstName
    this.lastName = lastName
    this.age = age
    this.address = address
}

Person.self = function(){
    return this
}

Person.prototype.toString = function(){
    return '[object Person]'
}

Person.prototype.getFullName = function(){
    return this.firstName + ' ' + this.lastName
}

// ES6
class Person{
    constructor(firstName, lastName, age, address){
        this.firstName = firstName
        this.lastName = lastName
        this.age = age
        this.address = address
    }

    static self(){
        return this
    }

    toString(){
        return '[object Person]'
    }

    getFullName(){
        return `${this.firstName} ${this.lastName}`
    }
}

рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдб рдФрд░ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо:

// ES5
Employee.prototype = Object.create(Person.prototype)

function Employee(firstName, lastName, age, address, jobTitle, yearStarted){
    Person.call(this, firstName, lastName, age, address)
    this.jobTitle = jobTitle
    this.yearStarted = yearStarted
}

Employee.prototype.describe = function(){
    return `I am ${this.getFullName()} and I have a position of #{this.jobTitle} and I started at ${this.yearStarted}}`
}

Employee.prototype.toString = function(){
    return '[object Employee]'
}

// ES6
class Employee extends Person{ //   Person
    constructor(firstName, lastName, age, address, jobTitle, yearStarted){
        super(firstName, lastName, age, address)
        this.jobTitle = jobTitle
        this.yearStarted = yearStarted
    }

    describe(){
       return `I am ${this.getFullName()} and I have a position of #{this.jobTitle} and I started at ${this.yearStarted}}` 
    }

    toString(){ //   toString  Person
        return '[object Employee]'
    }
}

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдиреЗрдВ?

class Something{ }

function AnotherSomething(){ }

const as = new AnotherSomething()
const s = new Something()

console.log(typeof Something) // function
console.log(typeof AnotherSomething) // function
console.log(as.toString()) // [object Object]
console.log(a.toString()) // [object Object]
console.log(as.toString === Object.prototype.toString)
console.log(a.toString === Object.prototype.toString)
//     true
// Object.prototype     
// Something  AnotherSomething   Object.prototype

45. рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЯрд░рд▓ рдХреНрдпрд╛ рд╣реИрдВ?


рдЬреЗрдПрд╕ рдореЗрдВ рддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рджреЛрд╣рд░реЗ рдмреИрдХрдЯрд┐рдХреНрд╕ (``) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ:

// ES5
var greet = 'Hi I\'m Mark'

// ES6
let greet = `Hi I'm Mark`

рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЙрджреНрдзрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
// ES5
var lastWords = '\n'
    + ' I \n'
    + ' am \n'
    + 'Iron Man \n'

// ES6
let lastWords = `
    I
    am
    Iron Man
`

рдИрдПрд╕ 6 рдореЗрдВ, рд╣рдореЗрдВ рд▓рд╛рдЗрди рдХреЛ рдлреАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ "\ n" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

// ES5
function greet(name){
    return 'Hello ' + name + '!'
}

// ES6
function greet(name){
    return `Hello ${name}!`
}

ES6 рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорд╡рд░реНрддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╣рдо рдЪрд░ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ $ {expr} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

46. тАЛтАЛрд╡рд╕реНрддреБ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХреНрдпрд╛ рд╣реИ?


рд╡рд┐рдирд╛рд╢ рдХрд░рдирд╛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдпрд╛ рд╕рд░рдгреА рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ (рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ) рдХрд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ:

const employee = {
    firstName: 'Marko',
    lastName: 'Polo',
    position: 'Software Developer',
    yearHired: 2017
}

рдкрд╣рд▓реЗ, рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЪрд░ рдмрдирд╛рдПред рдпрд╣ рдмрд╣реБрдд рдЙрдмрд╛рдК рдФрд░ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛:

var firstName = employee.firstName
var lastName = employee.lastName
var position = employee.position
var yearHired = employee.yearHired

рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдХреНрд▓реАрдирд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХрдо рд╕рдордп рд▓реЗрддрд╛ рд╣реИред рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рд╣рдо рдЙрди рдЧреБрдг рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдШреБрдВрдШрд░рд╛рд▓реЗ рдХреЛрд╖реНрдардХ ({}) рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ ([]) рдореЗрдВ:

let { firstName, lastName, position, yearHired } = employee

рдЪрд░ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, "propertyName: newName" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

let { firstName: fName, lastName: lName, position, yearHired } = employee

рдЪрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "propertyName = 'defaultValue' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:"

let { firstName = 'Mark', lastName: lName, position, yearHired } = employee

47. рдореЙрдбреНрдпреВрд▓ рдХреНрдпрд╛ рд╣реИрдВ?


рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХреЛрдб (рд╕рдВрдпреЛрдЬрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рдХреЛрдб рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдЬреЗрдПрд╕ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдорд░реНрдерди рдХреЛрдб рдХреЗ рд▓рд┐рдП рджреЛ рд▓реЛрдХрдкреНрд░рд┐рдп рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдереЗ:

  • рдХреЙрдордирдЬрд╕ - рдиреЙрдбрдЬрд╕
  • AMD (AsyncronousModuleDefinition) - рдмреНрд░рд╛рдЙрдЬрд╝рд░

рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рд╣рдо рдЖрдпрд╛рдд рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рдорд╛рди рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдирд╛рдорд┐рдд рдирд┐рд░реНрдпрд╛рдд):

// ES5 CommonJS - helpers.js
exports.isNull = function(val){
    return val === null
}

exports.isUndefined = function(val){
    return val === undefined
}

exports.isNullOrUndefined = function(val){
    return exports.isNull(val) || exports.isUndefined(val)
}

// ES6 
export function isNull(val){
    return val === null;
}

export function isUndefined(val) {
    return val === undefined;
}

export function isNullOrUndefined(val) {
    return isNull(val) || isUndefined(val);
}

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ:

// ES5 CommonJS - index.js
const helpers = require('./helpers.js')
const isNull = helpers.isNull
const isUndefined = helpers.isUndefined
const isNullOrUndefined = helpers.isNullOrUndefined

//    
const { isNull, isUndefined, isNullOrUndefined } = require('./helpers.js')

// ES6 
import * as helpers from './helpers.js' // helpers -  

// 
import { isNull, isUndefined, isNullOrUndefined as isValid} from './helpers.js' //  "as"  

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд:

// ES5 CommonJS - index.js
class Helpers {
    static isNull(val){
        return val === null
    }

    static isUndefined(val){
        return val === undefined
    }

    static isNullOrUndefined(val){
        return this.isNull(val) || this.isUndefined(val)
    }
}

module.exports = Helpers

// ES6 
class Helpers {
    static isNull(val){
        return val === null
    }

    static isUndefined(val){
        return val === undefined
    }

    static isNullOrUndefined(val){
        return this.isNull(val) || this.isUndefined(val)
    }
}

export default Helpers

рдЖрдпрд╛рдд:

// ES5 CommonJS - index.js
const Helpers = require('./helpers.js')
console.log(Helpers.isNull(null))

// ES6 
import Helpers from './helpers.js'
console.log(Helpers.isNull(null))

рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдореВрд▓ рдЙрдкрдпреЛрдЧ рд╣реИред рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реА рдкреЛрд╕реНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред

48. рдПрдХ рд╕реЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпрд╛ рд╣реИ?


рд╕реЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рдЕрдиреВрдареЗ рдорд╛рдиреЛрдВ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рд╕реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реЗрдордЬрд╝реЗрд░реЛрд╡реЗрд▓реНрдпреВ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рд╕реЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп рдХреБрдЫ рдорд╛рди рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const set1 = new Set()
const set2 = new Set(['a','b','c','d','d','e']) //  "d"  

рд╣рдо рдРрдб рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдорд╛рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдРрдб рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

set2.add('f')
set2.add('g').add('h').add('i').add('j').add('k').add('k') //  "k"  

рд╣рдо рд╣рдЯрд╛рдПрдБ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рд╕реЗ рдорд╛рди рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

set2.delete('k') // true
set2.delete('z') // false,    set2   

рд╣рдо рд╕реЗрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

set2.has('a') // true
set2.has('z') // false

рд╕реЗрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдХрд╛рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

set2.size // 10

рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреА рд╣реИ:

set2.clear() // 

рд╣рдо рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

const nums = [1,2,3,4,5,6,6,7,8,8,5]
const uniqNums = [...new Set(nums)] // [1,2,3,4,5,6,7,8]

49. рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рд╣реИ?


рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЙрд▓ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ)ред

const btnAdd = document.getElementById('btnAdd')

btnAdd.addEventListener('click', function clickCallback(e)){
    //   
}

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ "btnAdd" рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдкрд░ "рдХреНрд▓рд┐рдХ" рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдХреНрд▓рд┐рдХрдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛ рдпрд╛ рдИрд╡реЗрдВрдЯ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдо, рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рджреГрд╢реНрдп рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рд╣реИ: рдЖрдк рдХрд┐рд╕реА рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЖрдк рдЙрд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдХреЙрд▓ рдпрд╛ рд╕рдВрджреЗрд╢ рдПрдХ рдШрдЯрдирд╛ рдпрд╛ рдбреЗрдЯрд╛ рд╣реИ, рдФрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рдПрдХ рд╡рд╛рдкрд╕реА рдХреЙрд▓ рдХреА рдЙрдореНрдореАрдж (рдкреНрд░рддреНрдпрд╛рд╢рд╛) рд╣реИред

50. рд╡рд╛рджреЗ рдХреНрдпрд╛ рд╣реИрдВ?


рдЬреЗрдПрд╕ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рд╡рд╛рджреЗред рд╡реЗ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рддрдерд╛рдХрдерд┐рдд рдирд░рдХ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рджреЗ рдХрд┐рдП рдЧрдП рдереЗред

fs.readFile('somefile.txt', function(e, data){
    if(e){
        console.log(e)
    }
    console.log(data)
})

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рддрдм рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ рдЬрдм рд╣рдореЗрдВ рдкрд╣рд▓реЗ (рдкрд╣рд▓реЗ рдХреЗ рдЕрдВрджрд░), рдлрд┐рд░ рджреВрд╕рд░реЗ, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ рдЧрдиреНрджрд╛ рдФрд░ рдЕрдкрдардиреАрдп рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:

fs.readFile('somefile.txt', function(e,data){
    // 
    fs.readFile('directory', function(e, files){
        // 
        fs.mkdir('directory', function(e){
            // 
        })
    })
})

рдФрд░ рдпрд╣рд╛рдВ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:

promReadFile('file/path')
.then(data => {
    return promReaddir('directory')
})
.then(data => {
    return promMkdir('directory')
})
.catch(e => {
    console.error(e)
})

рд╡рд╛рджреЗ рдХреА рдЪрд╛рд░ рд╢рд░реНрддреЗрдВ рд╣реИрдВ:

  • рдкреНрд░рддреАрдХреНрд╖рд╛ рдПрдХ рд╡рд╛рджреЗ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рд╡рд╛рджреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдЬреНрдЮрд╛рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред
  • рд╕рдВрдкрдиреНрди - рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реБрдЖ, рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реИред
  • рдЕрд╕реНрд╡реАрдХреГрдд - рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓, рдПрдХ рдХрд╛рд░рдг рд╣реИред
  • рдкреВрд░реНрдг - рдкреВрд░реНрдг рдпрд╛ рдЕрд╕реНрд╡реАрдХреГрддред

рдкреНрд░реЙрдорд┐рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣рд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╕реНрд╡реАрдХрд╛рд░ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдгред рдкрд░рд┐рдгрд╛рдо рдХреЛ .then рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдХреЛ .catch рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред .Then рд╡рд┐рдзрд┐ рднреА рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрдИ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

const myPromiseAsync = (...args) => {
    return new Promise((resolve, reject) => {
        doSomeAsync(...args, (error, data) => {
            if(error){
                reject(error)
            } else{
                resolve(data)
            }
        })
    })
}

myPromiseAsync()
.then(result => {
    console.log(result)
})
.catch(reason => {
    console.error(reason)
})

рд╣рдо рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ Node.js ("рдкреНрд░реЙрдорд┐рд╕рд┐рдлрд┐рдХреЗрд╢рди") рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

const toPromise = (asyncFuncWithCallback) => {
    return (...args) => {
        return new Promise((res, rej) => {
            asyncFuncWithCallback(...args, (e, result) => {
                return e ? rej(e) : res(result)
            })
        })
    }
}

const promiseReadFile = toPromise(fs.readFile)

promiseReadFile('file/path')
.then((data) => {
    console.log(data)
})
.catch(e => console.error(e))

рдЖрдк рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

51. рдПрд╕рд┐рдВрдХреНрд╕ / рд╡реЗрдЯ рдХреНрдпрд╛ рд╣реИ?


JS рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ (рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ) рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП Async / рдЗрдВрддрдЬрд╛рд░ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред рд╡реЗ рдПрдХ рд╡рд╛рджреЗ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИрдВред рдпрд╣ рд╡рд╛рджреЗ рдФрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рд╕реНрд╡рдЪреНрдЫ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рджреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред

// 
function callApi(){
    return fetch('url/to/api/endpoint')
    .then(resp => resp.json())
    .then(data => {
        //   
    }).catch(err => {
        //   
    })
}

// async/await
//     try/catch
async function callApi(){
    try{
        const resp = await fetch('url/to/api/endpoint')
        const data = await res.json()
        //   
    } catch(e){
        //   
    }
}

рдпрд╛рдж рд░рдЦреЗрдВ: рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ async рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ:

const giveMeOne = async () = 1

giveMeOne()
.then((num) => {
    console.log(num) // 1
})

рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рдЗрдВрддрдЬрд╛рд░ рдХреЛрдб рдХреА рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░ рдкрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

const giveMeOne = async() => 1

function getOne(){
    try{
        const num = await giveMeOne()
        console.log(num)
    } catch(e){
        console.log(e)
    }
}
// Uncaught SyntaxError: await is only valid in an async function

async function getTwo(){
    try{
        const num1 = await giveMeOne()
        const nm2 = await giveMeOne()
        return num1 + num2
    } catch(e){
        console.log(e)
    }
}

await getTwo() // 2

рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред

52. рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдФрд░ рдмрд╛рдХреА рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмреАрдЪ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рдкреНрд░рд╕рд╛рд░ рдФрд░ рдмрд╛рдХреА рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╣реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ ("...") рд╣реИред рдЕрдВрддрд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рд╕рд╛рд░ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╕рд░рдгреА рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдпрд╛ рдлреИрд▓рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдХреА рдорджрдж рд╕реЗ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ (рдпрд╛ рд╣рдо рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ)ред

function add(a, b){
    return a + b
}

const nums = [5, 6]
const sum = add(...nums)
console.log(sum) // 11

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдРрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдЕрдВрдХ рд╕рд░рдгреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╕реНрдкреНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЪрд░ "a" рдХрд╛ рдорд╛рди 5, b = 6, рдпреЛрдЧ = 11 рд╣реЛрдЧрд╛ред

function add(...rest){
    return rest.reduce((total, current) => total + current)
}

console.log(add(1, 2)) // 3
console.log(add(1, 2, 3, 4, 5)) // 15

рдпрд╣рд╛рдВ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдРрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рдЗрди рддрд░реНрдХреЛрдВ рдХрд╛ рд░рд┐рдЯрд░реНрди рдЬреЛрдбрд╝реЗрдВред

const [first, ...others] = [1, 2, 3, 4, 5]
console.log(first) // 1
console.log(others) // [2, 3, 4, 5]

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕рд░рдгреА рдХреЛ рдЫреЛрдбрд╝рдХрд░ рджреВрд╕рд░реЛрдВ рдХреА рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреВрд╕рд░реЗ рдРрд░реЗ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

53. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВ?


рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрд░ рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рддрд░реАрдХрд╛ рд╣реИред

// ES5
function add(a,b){
    a = a || 0
    b = b || 0
    return a + b
}

// ES6
function add(a = 0, b = 0){
    return a + b
}
//      "a"  "b" - ,    0
add(1) // 1

рдЖрдк рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function getFirst([first, ...rest] = [0, 1]){
    return first
}

getFirst() // 0
getFirst([10,20,30]) // 10

function getArr({ nums } = { nums: [1,2,3,4] }){
    return nums
}

getArr // [1,2,3,4]
getArr({nums:[5,4,3,2,1]}) // [5,4,3,2,1]

рд╣рдо рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдШреЛрд╖рд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function doSomethingWithValue(value = 'Hello World', callback = () => { console.log(value) }){
    callback()
}
doSomethingWithValue() // Hello World

54. рдПрдХ рд╡рд╕реНрддреБ рдЖрд╡рд░рдг (рдЖрд╡рд░рдг рд╡рд╕реНрддреБрдПрдВ) рдХреНрдпрд╛ рд╣реИ?


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рд╡рд╕реНрддреБрдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЖрджрд┐рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдмреВрд▓рд┐рдпрди рдореЗрдВ рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ:

let name = 'marko'

console.log(typeof name) // string
console.log(name.toUpperCase()) // MARKO

рдирд╛рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░) рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдЯреЙрдкрд░рдХреИрд╕ () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ "MARKO" рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдирд╛рдо рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЖрджрд┐рдо, рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдХ рдЖрд╡рд░рдг рд╡рд╕реНрддреБ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдирдВрдмрд░, рдмреВрд▓рд┐рдпрди, рд╕рд┐рдВрдмрд▓ рдФрд░ рдмрд┐рдЧрдЖрдИрдВрдЯ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:

console.log(new String(name).toUpperCase()) // MARKO

рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

55. рдЗрдВрдкреНрд▓рд┐рдореЗрдВрдЯ рдФрд░ рдПрдХреНрд╕рдкреНрд▓реЛрд╕рд┐рд╡ рдХреЙрд░реНрд╢рди рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рд╣рдорд╛рд░реЗ рдЬреНрдЮрд╛рди (рднрд╛рдЧреАрджрд╛рд░реА) рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдбрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

console.log(1 + '6')
console.log(false + true)
console.log(6 * '2')

рдкрд╣рд▓реЗ рдХрдВрд╕реЛрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо 16 рд╣реЛрдЧрд╛ред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди JS 1 рдореЗрдВ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ 6. рд╕реЗ рд╕рдВрд▓рдЧреНрди (рд╕рдВрд▓рдЧреНрди) 6. рд╣рдордиреЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд░реВрдкрд╛рдВрддрд░рдг рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реБрдЖред

рджреВрд╕рд░реЗ рдХрдВрд╕реЛрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдХреНрд▓реЙрдЬ 1 рд╣реЛрдЧрд╛ред рдЧрд▓рдд рдХреЛ 0 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, 1. 0 + 1 = 1 рдХреЗ рд▓рд┐рдП рд╕рд╣реА

ред рддреАрд╕рд░рд╛ рдХрдВрд╕реЛрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред 12. рд▓рд╛рдЗрди 2 рдХреЛ 6 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирдВрдмрд░ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕реНрдкрд╖реНрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдорддрд▓рдм рд╣реИ рд╣рдорд╛рд░реА рднрд╛рдЧреАрджрд╛рд░реА рдореВрд▓реНрдп рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рдирд╛:

console.log(1 + parseInt('6'))

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо parseInt рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ 6 рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рджреЛрдиреЛрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ 7 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

56. NaN рдХреНрдпрд╛ рд╣реИ? рдпрджрд┐ рдорд╛рди NaN рд╣реИ рддреЛ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ?


NaN рдпрд╛ Not A рд╕рдВрдЦреНрдпрд╛ (рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ) рдПрдХ рдЧреИрд░-рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдкрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рд╣реИ:

let a

console.log(parseInt('abc'))
console.log(parseInt(null))
console.log(parseInt(undefined))
console.log(parseInt(++a))
console.log(parseInt({} * 10))
console.log(parseInt('abc' - 2))
console.log(parseInt(0 / 0))
console.log(parseInt('10a' * 10))

рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдИрдПрдирдПрдирдПрди рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореВрд▓реНрдп NaN рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ:

console.log(isNaN()) // true
console.log(isNaN(undefined)) // true
console.log(isNaN({})) // true
console.log(isNaN(String('a'))) // true
console.log(isNaN(() => { })) // true

рд╕рднреА рдХрдВрд╕реЛрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рддреНрдп рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХреЛрдИ рднреА рдорд╛рди NaN рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдорд╛рди NaN рд╣реИ, рддреЛ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ES6 Number.isNaN рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП "NaN рдЕрд╕рдорд╛рдирддрд╛" рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

function checkIsNan(value){
    return value !== value
}

57. рдХреИрд╕реЗ рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ рдорд╛рди рдПрдХ рд╕рд░рдгреА рд╣реИ?


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Array.isArray рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

console.log(Array.isArray(5)) // false
console.log(Array.isArray('')) // false
console.log(Array.isArray()) // false
console.log(Array.isArray(null)) // false
console.log(Array.isArray( {length: 5 })) // false
console.log(Array.isArray([])) // true

рдпрджрд┐ рдЖрдк рдЬрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЙрд▓реАрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function isArray(value){
    return Object.prototype.toString.call(value) === '[object Array]'
}

58. рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреЛрдИ рдореЛрдбреБрд▓реЛ рдбрд┐рд╡реАрдЬрди рдпрд╛ рдбрд┐рд╡реАрдЬрди рдХреЗ рд╕рд╛рде рд╢реЗрд╖ (рдСрдкрд░реЗрдЯрд░ "%") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реИ?


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдСрдкрд░реЗрдЯрд░ "рдФрд░" (рдмрд╛рдЗрдирд░реА рдФрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрд╛рдЗрдирд░реА рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред

function isEven(num){
    if(num & 1){
        return false
    } else{
        return true
    }
}

рдмрд╛рдЗрдирд░реА рдиреЛрдЯреЗрд╢рди рдореЗрдВ 0 000
1 рд╣реИ - рдпрд╣ 001
2 - 010
3 - 011
4 - 100
5 - 101
6 - 110
7 - 111
, рдЖрджрд┐ рд╣реИред



Console.log (5 рдФрд░ 1) рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред 1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдФрд░ рдСрдкрд░реЗрдЯрд░ рджреЛрдиреЛрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдмрд╛рдЗрдирд░реА рдорд╛рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, 5 101 рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, 1 001 рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ:



1 рдФрд░ 0 рдХреА
рддреБрд▓рдирд╛ рдХрд░реЗрдВ ред рд╣рдореЗрдВ 0 рдФрд░ 0 рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ ред , рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
1 рдФрд░ 1 рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рд╣рдо 1 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдорд╛рди рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ, рд╣рдореЗрдВ 1. рдорд┐рд▓рддрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рд╣рдо рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function isEven(num){
    if(num < 0 || num === 1) return false
    if(num == 0) return true
    return isEven(num - 2)
}

59. рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ?


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВред

рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

const o = {
    'prop': 'bwahahah',
    'prop2': 'hweasa'
}

console.log('prop' in o) // true
console.log('prop1' in o) // false

рджреВрд╕рд░рд╛ hasOwnProperty рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

console.log(o.hasOwnProperty('prop2')) // true
console.log(o.hasOwnProperty('prop1')) // false

рддреАрд╕рд░рд╛ рд╕рд░рдгреА рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╕рдВрдХреЗрддрди рд╣реИ:

console.log(o['prop']) // bwahahah
console.log(o['prop1']) // undefined

60. AJAX рдХреНрдпрд╛ рд╣реИ?


AJAX рдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрдХреНрд╕рдПрдордПрд▓ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗрдм рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЙрд╕рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

AJAX рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
HTML - рд╡реЗрдм рдкреЗрдЬ рд╕рдВрд░рдЪрдирд╛ред
рд╕реАрдПрд╕рдПрд╕ - рд╡реЗрдм рдкреЗрдЬ рд╢реИрд▓рд┐рдпреЛрдВред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдкреГрд╖реНрда рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдбреЛрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
XMLHttpRequest API - рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
PHP, Python, Nodejs - рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд░реНрд╡рд░ рднрд╛рд╖рд╛ред

61. JS рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?


рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ:

const o = {
    name: 'Mark',
    greeting(){
        return `Hi, I'm ${this.name}`
    }
}

o.greeting // Hi, I'm Mark

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди:

function Person(name){
    this.name = name
}

Person.prototype.greeting = function(){
    return `Hi, I'm ${this.name}`
}

const mark = new Person('Mark')

mark.greeting() // Hi, I'm Mark

Object.create рд╡рд┐рдзрд┐:

const n = {
    greeting(){
        return `Hi, I'm ${this.name}`
    }
}

const o = Object.create(n)

o.name = 'Mark'

console.log(o.greeting) // Hi, I'm Mark

62. рдХреНрдпрд╛ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИ Object.freeze рдФрд░ Object.seal?


рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ Object.freeze рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓ рдпрд╛ рд╕рдВрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ Object.seal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рд╣реЛрддрд╛ рд╣реИред

63. рдСрдкрд░реЗрдЯрд░ рдФрд░ hasOwnProperty рд╡рд┐рдзрд┐ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?


рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ "рдЗрди" рдСрдкрд░реЗрдЯрд░ рдХреЗрд╡рд▓ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рднреА рд╣реИ, рдФрд░ рд╣реИрд╡реНрдирдкреНрд░реЛрдкрд░реЗрдЯреА рд╡рд┐рдзрд┐ рдореЗрдВ - рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрджрдЧреА рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред

console.log('prop' in o) // true
console.log('toString' in o) // true

console.log(o.hasOwnProperty('prop')) // true
console.log(o.hasOwnProperty('toString')) // false

64. рдЬреЗрдПрд╕ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреМрди рд╕реА рддрдХрдиреАрдХреЗрдВ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ?


  • рдХреЙрд▓рдмреИрдХ
  • рд╡рд╛рджреЗ (рд╡рд╛рджреЗ)ред
  • Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред
  • Async.js, рдЦрд╛рдХрд╛, рдХреНрд╖, рд╕рд╣ рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпред

65. рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ?


рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:

hoistedFunc()
notHoistedFunc()

function hoistedFunc(){
    console.log('I am hoisted')
}

var notHoistedFunc = function(){
    console.log('I will not be hoisted!')
}

NotHoistedFunc рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди hoistedFunc рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ hoistedFunc "рдкреЙрдк рдЕрдк", рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рддрдХ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди notHoistedFunc рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

66. рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ?


рдЬреЗрдПрд╕ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ 4 рддрд░реАрдХреЗ рд╣реИрдВред рдХреЙрд▓ рдЗрд╕ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ "рдорд╛рд▓рд┐рдХ" рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВред рдпрджрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╡рд┐рдзрд┐, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдХреЙрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдорд╛рд▓рд┐рдХ рдЦрд┐рдбрд╝рдХреА рд╡рд╕реНрддреБ рд╣реИ:

function add(a,b){
    console.log(this)
    return a + b
}

add(1,5) // window, 6

const o = {
    method(callback){
        callback()
    }
}

o.method(function(){
    console.log(this) // window
})

рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВред рдЬрдм рдХреЛрдИ рдХрд╛рд░реНрдп рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЧреБрдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рдЬрдм рдХреЛрдИ рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рд╡рд╕реНрддреБ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреА рд╡рд╕реНрддреБ рдмрди рдЬрд╛рддреА рд╣реИ:

const details = {
    name: 'Marko',
    getName(){
        return this.name
    }
}

details.getName() // Marko,  this   details

рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВред рдЬрдм рдПрдХ рдлрд╝рдВрдХреНрд╢рди "рдирдпрд╛" рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╣реИ:

function Employee(name, position, yearHired){
    //   ,   this
    // this = {}
    this.name = name
    this.position = position
    this.yearHired = yearHired
    //   Employee.prototype   this,    
}

const emp = new Employee('Marko Polo', 'Software Development', 2017)

рд▓рд╛рдЧреВ рдпрд╛ рдХреЙрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдХреЙрд▓ред рдЬрдм рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдпрд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрд╡рд╛рдореА рдХрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

const obj1 = {
    result: 0
}

const obj2 = {
    result: 0
}

function reduceAdd(){
    let result = 0
    for(let i = 0, len = arguments.length; i < len; i++){
        result += arguments[i]
    }
    this.result = result
}

reduceAdd.apply(obj1, [1,2,3,4,5]) //  this  obj1
reduceAdd.call(obj2, 1,2,3,4,5) //  this  obj2

67. рд╕рдВрд╕реНрдорд░рдг рдпрд╛ рд╕рдВрд╕реНрдорд░рдг рдХреНрдпрд╛ рд╣реИ?


рдореЗрдореЛрдЗрдЬрд╝реЗрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдореЛрдВ рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрд╕реНрдорд░рдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рдорд╛рди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

68. рдЖрдк рд╕рдВрд╕реНрдорд░рдг рдХреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ?


function memoize(fn){
    const cache = {}
    return function(param){
        if(cache[param]){
            console.log('cached')
            return cache[param]
        } else{
            let result = fn(param)
            cache[param] = result
            console.log('not cached')
            return result
        }
    }
}

const toUpper = (str = '') => str.toUpperCase()

const toUpperMemoized = memoize(toUpper)

toUpperMemoized('abcdef')
toUpperMemoized('abcdef') //  

рд╣рдордиреЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдВрд╕реНрдорд░рдг рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЪрд▓реЛ рдЗрд╕реЗ "рдмрд╣реБ-рддрд░реНрдХ" рдмрдирд╛рддреЗ рд╣реИрдВ:

const slice = Array.prototype.slice
function memoize(fn){
    const cache = {}
    return (...args) => {
        const params = slice.call(args)
        console.log(params)
        if(cache[params]){
            console.log('cached')
            return cache[params]
        } else{
            let result = fn(...args)
            cache[params] = result
            console.log('not cached')
            return result
        }
    }
}
const makeFullName = (fName, lName) => `${fName} ${lName}`
const reduceAdd = (numbers, startValue = 0) => numbers.reduce((total, cur) => total + cur, startValue)

const memoizedFullName = memoize(makeFullName)
const memoizeReduceAdd = memoize(reduceAdd)

memoizedFullName('Marko', 'Polo')
memoizedFullName('Marko', 'Polo') //  

memoizeReduceAdd([1,2,3,4],5)
memoizeReduceAdd([1,2,3,4],5) //  

69. рдЯрд╛рдЗрдкрдСрдлрд╝ рдирд▓ рдХреНрдпреЛрдВ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ? рдпрджрд┐ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ?


рдЯрд╛рдЗрдкреЛрдлрд╝ рдирд▓ == 'рдСрдмреНрдЬреЗрдХреНрдЯ' рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд░рд╣реЗрдЧрд╛ред рдЯрд╛рдЗрдкрдСрдлрд╝ null = 'рдСрдмреНрдЬреЗрдХреНрдЯ' рдХреЛ рдЯрд╛рдЗрдкрдСрдлрд╝ null = 'null' рдореЗрдВ рдмрджрд▓рдХрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд╣рд┐рдд рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕ рддрд░рд╣ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛)ред

рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рдЖрдк рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛ рдСрдкрд░реЗрдЯрд░ (===) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

function isNull(value){
    return value === null
}

70. "рдирдпрд╛" рдХреАрд╡рд░реНрдб рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?


рдХреАрд╡рд░реНрдб "рдирдпрд╛" рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рдирдИ рд╡рд╕реНрддреБ (рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреЛрдб рд╣реИ:

function Employee(name, position, yearHired){
    this.name = name
    this.position = position
    this.yearHired = yearHired
}

const emp = new Employee('Marko Polo', 'Software Development', 2017)

рдХреАрд╡рд░реНрдб "рдирдпрд╛" 4 рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ:

  1. рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИред
  2. рдЗрд╕ рдорд╛рди рдХреЛ рдЗрд╕реЗ рдмрд╛рдВрдзрддрд╛ рд╣реИред
  3. рдПрдХ рдлрд╝рдВрдХреНрд╢рди functionName.prototype рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИред
  4. рдЗрд╕реЗ рддрдм рддрдХ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛред

Source: https://habr.com/ru/post/undefined/


All Articles