នៅ​ក្នុង​ភាសា 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 ក៏​ដូច​ជា​ឈ្មោះ​របស់​មនុស្ស​យើង​ដែរ​​។ ពោល​គឺ​មនុស្ស​ឈ្មោះ វុទ្ធី នៅ​ក្នុង​គ្រួសារ ក ខុស​ពី​មនុស្ស​ឈ្មោះ វទ្ធី នៅ​ក្នុង​គ្រួសារ ខ ទោះបី​ជា​មនុស្ស​ទាំងពីរ​នាក់​នោះ​​មាន​ឈ្មោះ​ដូច​គ្នា​យ៉ាង​ណា​ក៏​ដោយ​៕