នៅក្នុងភាសា ES6 នៅពេលដែលយើងយកអថេរណាមួយមកប្រើ ការស្វែងរកអថេរនោះ ត្រូវធ្វើឡើងតាមគំនូសបំព្រួញដូចខាងក្រោមនេះ៖
គឺថាការស្វែងរកអថេរត្រូវធ្វើឡើង ដោយចាប់ផ្តើមនៅក្នុងដែនកំណត់ ដែលអថេរត្រូវបានយកទៅប្រើ រួចបានបន្តទៅដែនកំណត់ផ្សេងៗទៀត តាមសញ្ញាព្រួញដូចមាននៅក្នុងរូបខាងលើនេះ រហូតដល់អស់ដែនកំណត់។ ពិនិត្យកម្មវិធីខាងក្រោមនេះ៖
//ការបង្កើតឃ្លាមួយនៅក្នុងដែនកំណត់ក្រៅ
let outerSentence = 'Global scope'
function outerFunction(){
//ការបង្កើតឃ្លាមួយទៀតនៅក្នុងដែលកំណត់ក្នុង
let outerFunctionSentence = 'Local scope'
function innerFunction(){
//ការបង្កើតឃ្លាមួយទៀតក្នុងដែនកំណត់ចារឹកក្នុង
let innerFunctionSentence = 'Nested scope'
console.log(`${outerSentence}`)
console.log(`${outerFunctionSentence}`)
console.log(`${innerFunctionSentence}`)
}
innerFunction()
}
outerFunction()
ដោយការស្វែងរកអថេរផ្សេងៗ ត្រូវប្រព្រឹត្តទៅដូចនៅក្នុងគំនូសបំព្រួញខាងលើ ដូចនេះយើងមិនអាចយកអថេរនៅក្នុងដែនកំណត់នៅខាងក្រោម មកប្រើនៅក្នុងដែនកំណត់នៅខាងលើបានឡើយ។ ពិនិត្យកម្មវិធីខាងក្រោមនេះ៖
function outerFunction(){
let outerSentence = 'ដែនកំណត់ចារឹកក្រៅ'
//ការសាកល្បងយកវត្ថុនៅក្នុងដែនកំណត់ចារឹកក្នុងមកប្រើ
console.log(innerSentence)
function innerFunction(){
let innerSentence = 'ដែនកំណត់ចារឹកក្នុង'
}
innerFunction()
}
outerFunction()
ម៉្យាងទៀត អថេរនៅក្នុងដែនកំណត់ផ្សេងៗគ្នា គឺជាអថេរខុសៗគ្នា ទោះបីជាអថេរទាំងនោះមានឈ្មោះដូចគ្នាក៏ដោយ។ ពិនិត្យកម្មវិធីខាងក្រោមនេះ៖
//ការបង្កើតអថេរមានឈ្មោះ info មួយនៅក្នុងដែលកំណត់ក្រៅ
let info = 1000
console.log(`In global scope variable info is ${info}`)
function outerFunction(){
//ការបង្កើតអថេរឈ្មោះ info មួយទៀតនៅក្នុងដែនកំណត់ក្នុង
let info = true
console.log(`In local scope variable info is ${info}`)
function innerFunction(){
//ការបង្កើតអថេរឈ្មោះ info មួយទៀតនៅក្នុងដែនកំណត់ចារឹកក្នុង
let info = 'sentence'
console.log(`In nested scope variable info is ${info}`)
}
innerFunction()
}
outerFunction()
នៅក្នុងកម្មវិធីខាងលើ យើងសង្កេតឃើញថា មានអថេរមានឈ្មោះថា info ដូចគ្នាចំនួន 3 ត្រូវបានបង្កើតឡើងនៅក្នុងដែនកំណត់ 3 ខុសៗគ្នា។ ជាលទ្ធផល អថេរទាំងនោះគឺជាអថេរ 3 ខុសៗគ្នា ទោះជាវាមានឈ្មោះដូចគ្នាយ៉ាងណាក៏ដោយ ព្រោះវាត្រូវបានបង្កើតឡើងនៅក្នុងដែនកំណត់បី ខុសៗគ្នា។
ចំពោះអថេរដែលស្ថិតនៅក្នុងក្បួនខុសៗគ្នា គឺជាអថេរខុសៗគ្នា ទោះបីជាអថេរទាំងនោះមានឈ្មោះដូចគ្នាក៏ដោយ ពីព្រោះនៅក្នុងក្បួននិមួយៗ គឺជាដែនកំណត់ក្នុងខុសៗគ្នា។ ពិនិត្យកម្មវិធីខាងក្រោមនេះ៖
function getProfit(sale, purchase){
let profit = sale - purchase
return profit
}
function totalMoney(sale, purchase){
//ការយកក្បួនដែលមានដំណាង sale និង purchase ដូចគ្នាមកប្រើ
let cash = sale + purchase + getProfit(sale, purchase)
console.log(`The total amount of money is ${cash}`)
}
totalMoney(1000, 900)
ដូចនេះយើងឃើញថា ក្បួនឈ្មោះ getProfit និងក្បួនឈ្មោះ totalMoney សុទ្ធតែមានដំណាងដែលជាឈ្មោះ sale និង purchase ដូចគ្នា តែឈ្មោះទាំងនោះ ជាឈ្មោះខុសៗគ្នា ព្រោះវាស្ថិតនៅក្នុងដែនកំណត់ក្នុង ដែលជាក្បួនពីរផ្សេងគ្នា។
សរុបមក ឈ្មោះរបស់អថេរនៅក្នុងភាសា ES6 ក៏ដូចជាឈ្មោះរបស់មនុស្សយើងដែរ។ ពោលគឺមនុស្សឈ្មោះ វុទ្ធី នៅក្នុងគ្រួសារ ក ខុសពីមនុស្សឈ្មោះ វទ្ធី នៅក្នុងគ្រួសារ ខ ទោះបីជាមនុស្សទាំងពីរនាក់នោះមានឈ្មោះដូចគ្នាយ៉ាងណាក៏ដោយ៕