ახლა, როცა უკვე დაძლიეთ ფუნქციის საფუძვლები
მინდა გესაუბროთ ოდნავ რთულ საკითხზე.
განსხვავებაზე ლოკალურსა და გლობალურ ცვლადებს შორის.
შეიძლება ეს ტერმინები ჯერ არაფერს გეუბნებოდეთ.
მაგალითით დავიწყოთ.
ეს პროგრამა გავაკეთე
რათა მეჩვენებინა რამდენი ინჩით გავიზარდე ბავშვობაში.
რადგან ადამიანები განსხვავებული ტემპით იზრდებიან,
მე მოვიფიქრე ფუნქცია "calcInches",
სადაც დავწერე "startAge", "endAge"
და "inchesPerYear".
შემდეგ ის გამოითვლიდა
მთლიანად რამდენი ინჩით გავიზარდეთ დროის მონაკვეთში.
...და დაუბრუნებდა იმას ვინც გამოიძახა.
ხედავთ, რომ ნულიდან რვამდე
ვიძახებ "calcInches" და ვწერ ნულს, რვას და 2.5-ს.
რადგან წელიწადში დაახლოებით 2.5-ით ვიზრდებოდი.
როგორც ხედავთ ითვლის და შედეგად 20-ს გვაძლევს.
შემდეგ ვიძახებ რვიდან 16-მდე და ვაძლევ რვას 16-ს და ორს.
რადგან იმდენად არ ვიზრდებოდი და ხედავთ, რომ შედეგად 16-ს გვაძლევს.
კარგი ჩანს, მაგრამ ახლა
მინდა ვაჩვენო მთლიანად რამდენით გავიზარდე ბავშვობაში.
როგორ ვაკეთებ ამას. შემიძლია ჩემ ფუნქციას შევხედო
და ვიფიქრო რა მნიშვნელობები მაქვს აქ.
მაქვს თუ არა რაიმე, რაც მთლიან ინჩებს გამოსახავს?
მაქვს "totalInches" ცვლადი "calcInches" ფუნქციაში
შემიძლია გავაწარმოო, ვნახოთ რას მომცემს.
დავწეროთ "text", "totalInches",
ვნახოთ, რა მოხდება.
"Oh noes" ბიჭი გვეუბნება, რომ პრობლემაა.
"totalInches" არ არის განსაზღვრული.
უცნაურია, რადგან
აი აქ განვსაზღვრეთ totalInches.
var "totalInches" უდრის--
პრობლემა ისაა, რომ totalInches ფუნქციის შიგნით განვსაზღვრეთ.
ამ სტროფზე.
როდესაც ცვლადს ფუნქციის შიგნით ვსაზღვრავთ,
ის ლოკალურ ცვლადად მიიჩნევა.
მხოლოდ ამ ფუნქციის შიგნით ცხოვრობს.
ფუნქციის გარეთ რაცაა
ვერ ხედავს ფუნქციის შიგნითა ლოკალურ ცვლადებს.
მხოლოდ იმას ხედავს, რაც ბრუნდება.
მხოლოდ ამ შედეგს ხედავს, არა ცვლადს.
როდესაც ვცდილობთ totalInches ფუნქციის გარეთ გამოყენებას,
მან არ იცის ეს რაარის
და ამბობს, რომ ეს ცვლადი აქამდე არ უნახავს.
იგი არ არის განსაზღვრული.
გვაქვს გზა, რის მეშვეობითაც,
გარე კოდი შეძლებს ამ ცვლადის დანახვას.
თუ ლოკალურიდან გობალურ ცვლადად გარდავქმნით.
ეს შეგვიძლია განსაზღვრის ფუნქციის გარეთ გატანით.
იმაში, რასაც გლობალური ჰორიზონტი ჰქვია.
ფუნქციის შიგნით
მის მნიშვნელობას ვცვლით ყოველ ჯერზე, არ ვსაზღვრავთ.
როგორც ხედავთ, მთლიანი ზრდა სიცოცხლის მანძილზე 16-ს უდრის.
მან იპოვა ცვლადი, რადგან გლობალურ ცვლადად გარდავქმენით.
მაგრამ ჩვენ სხვა მნიშვნელობას ვეძებთ.
ეს ყველაზე ახალი მნიშვნელობაა.
რადგან, ყოველ ჯერზე, როდესაც ამ ფუნქციას ვიძახებთ
totalInches აყენებს იმაზე, რასაც იმ შემთხვევისთვის ითვლის.
გვინდა ახალი ცვლადი,
რომელიც დაიმახსოვრებს მხოლოდ
მთლიან totalInches, რომელსაც ყოველ ჯერზე ვამატებთ.
მოდით, ეს ლოკალური ცვლადი გავხადოთ
და შევქმნათ ახალი გლობალური ცვლადი.
რომელსაც "lifeInches"-ს დავარქმევთ.
ნულზე დავიწყებთ.
ფუნქციის შიგნით, ამ გლობალურ ცვლადს დავამატებთ
--"lifeInches" პლუს უდრის "totalInches"--
რასაც გამოთვლით ამ ფუნქციის ყოველ გამოძახებაზე,
დავამატებთ "lifeInches"-ს გლობალურ ცვლადს.
ბოლოში ვაჩვენებთ "lifeInches"-ს.
სრული ზრდა სიცოცხლის მანძილზე.
ეს ჩემი ნამდვილი სიმაღლე არ არის.
ამაზე მაღალი ვარ, მაგრამ
ეს იმიტომაა, რომ
ბადებისას ჩვენი სიმაღლე ნულზე მაღალია.
სრული თუ მინდა, იქნებ 20-ზე დამეწყო.
აი, ჩემი სიმაღლეც.
გადავხედოთ,
"totalInches" ვეძახით ლოკალურ ცვლადს.
ეს ვიცით, რადგან ფუნქციის შიგნით ვხედავთ მის განსაზღვრებას
და არა ფუნქციის გარეთ.
ეს ნიშნავს, რომ
ამ გარეთა კოდმა არ იცის ამ ცვლადის შესახებ,
"totalInches"-ს რომ ვეძახით.
"lifeInches"-ს ვუწოდებთ გლობალურ ცვლადს.
ეს ვიცით, რადგან მის განსაზღვრებას ფუნქციის გარეთ ვხედავთ.
გლობალურ ზონაში.
სცადეთ გახსოვდეთ ეს,
როდესაც ფუნქციებსა და ცვლადებს წერთ.
და დაფიქრდით ლოკალური ცვლადი გინდათ, მხოლოდ ფუნქციამ რომ გამოიყენოს
თუ გლობალური, მთელი პროგრამისთვის.
არაუშავს თუ რთულია ამის გაგება.
ეს ერთ-ერთი ყველაზე დამაბნეველი ცნებაა პროგრამირებაში.
განსაკუთრებით JavaScript-ში.
თუ ივარჯიშებთ, უკეთ გამოგივათ.