ดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
 

ปัจจุบัน javascript เข้ามามีบทบาทในการเขียนเว็บมาก มีการออก Framework  มากมายให้มาได้ลองเล่นกัน และ javascript เองก็มีการอัพเดตไปเรื่อยๆ ซึ่งแน่นอนทำให้ให้มี feature ใหม่ๆมากมายเกิดขึ้นเพื่อให้เขียนได้สั้นลงและแก้ปัญหาที่เกิดขึ้นในเวลาที่ผ่านมา

บทความนี้อธิบายความแตกต่างระหว่างฟังก์ชั่นปกติและ  arrow functions

arrow functions เป็น feature ใหม่ที่นำมาใช้ใน JavaScript ES6 (ES2015) - เป็นการเขียนที่ฟังก์ชั่นที่รัดกุมใน JavaScript   ซึ่งทั้งสองฟังก์ชั่นไม่ว่าจะเป็นฟังก์ชันปกติและ arrow functions เป็นการเขียนที่มีกรทำงานในลักษณะที่คล้ายกัน แต่ก็มีความแตกต่างที่น่าสนใจของทั้งสองรูปแบบฟังก์ชัน 

การเขียนฟังก์ชันแบบปกติเรามักจะเขียนแบบนี้

let x = function function_name(parameters){ 
// body of the function 
}; 

เช่น ดังนี้ 

let square = function(x){ 
return (x*x); 
}; 
console.log(sqaure(9)); 

ผลลัพธ์ที่ได้

output
ผลลัพธ์ของฟังก์ชันปกติ

ส่วนการเขียน ฟังก์ชันแบบ arrow functions

let x = (parameters) => { 
	// body of the function 
}; 

เช่น 

var square = (x) => { 
	return (x*x); 
}; 
console.log(square(9)); 

ผลลัพธ์ที่ได้

output
ผลลัพธ์ของฟังก์ชัน arrow functions

จะเห็นว่ามีผลลัพธ์เหมื่อนกัน แต่การเขียนที่แตกต่าง รูปแบบ arrow function ค่อนข้างจะกระชับกว่า 

แต่มีข้อแต่ต่างนิดหน่อยตรงที่เมื่อเราใช้ this ภาษา javascript ความหมายของ this เปลี่ยนไปได้ง่ายเกินไป ซึ่งเจ้าตัวฟังก์ชั่นลูกศรนี้มาช่วยเราได้มาก ดูได้ในตัวอย่างต่อไปนี้

function Person(age) {
  this.age = age;
  this.growOld = function() { this.age++; }
}
var person = new Person(1);
setTimeout(person.growOld,1000);
setTimeout(function() { console.log(person.age); },2000);
// 1, should have been 2

ผลลัพธ์ที่ต้องการคือ 2 แต่เมื่อนำ code ไป execute กลับได้คำตอบเป็น 1 เพราะ this ใน function Person กับ this ใน growOld เป็นคนละตัวกัน ซึ่ง arrow function เข้ามาแก้ไข้ในส่วนนี้

function Person(age) {
  this.age = age;
  this.growOld = () => { this.age++; }
}
var person = new Person(1);
setTimeout(person.growOld,1000);
setTimeout(function() { console.log(person.age); },2000);
// 2

จะเห็นว่า this ภายใน function กับ this ผ่านใน function growOld จะมีค่าเท่ากัน 

 

ช่องทางการศึกษาเพิ่มเติมข่าวที่น่าสนใจเกี่ยวกับ : JAVASCRIPT

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
รวมเว็บไซต์เช็คDNS และวิธีเช็คDNS คำสั่ง nslookup ,IP domainname
โดย aninthana พฤ 22 ส.ค. 2019 5:45 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
12
พฤ 22 ส.ค. 2019 5:45 pm โดย aninthana
หลักสำคัญในการร่างสัญญา
โดย EyePornnipa พฤ 22 ส.ค. 2019 5:33 pm บอร์ด M089 - นางสาวพรนิภา ราชธานี
0
12
พฤ 22 ส.ค. 2019 5:33 pm โดย EyePornnipa
เที่ยว & กินไม่หยุด...ที่ตลาดวังหลัง จ.กรุงเทพมหานคร ฯ
โดย Patipat พฤ 22 ส.ค. 2019 5:05 pm บอร์ด M088 - ปฏิภัทร สารธรรม
0
5
พฤ 22 ส.ค. 2019 5:05 pm โดย Patipat
ถามเกี่ยวกับ Python GUI ( Tkinter )
โดย New Pimsean พฤ 22 ส.ค. 2019 4:33 pm บอร์ด Programming - C/C++ & java & Python
0
3
พฤ 22 ส.ค. 2019 4:33 pm โดย New Pimsean
ถ้าต้องการจดโดเมนเนม ต้องทำอย่างไร
โดย aninthana พฤ 22 ส.ค. 2019 3:20 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
17
พฤ 22 ส.ค. 2019 4:32 pm โดย thorng1
วิธีการทำเว็บไซต์ 2 ภาษา ในภาษา python
โดย jirawoot พฤ 22 ส.ค. 2019 3:20 pm บอร์ด Python Knowledge
0
3
พฤ 22 ส.ค. 2019 3:20 pm โดย jirawoot
จ่ายหนี้..น้อยลง!! ธนาคารพาณิชย์ ประกาศลดดอกเบี้ยเงินกู้
โดย promotion พฤ 22 ส.ค. 2019 3:17 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
6
พฤ 22 ส.ค. 2019 3:17 pm โดย promotion
Q - อยากทราบวิธีแก้หน้า Lost password ครับ
โดย jamepiyawat พฤ 22 ส.ค. 2019 11:24 am บอร์ด Joomla Development
8
48
พฤ 22 ส.ค. 2019 4:30 pm โดย thorng1
ขั้นตอนใดในกระบวนการสร้างต้นแบบที่จะทำให้ต้นแบบเกิดความสมบูรณ์เเละพร้อมนำไปใช้งานมากที่สุด เพราะเหตุใด
โดย Anonymous พฤ 22 ส.ค. 2019 1:19 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
6
พฤ 22 ส.ค. 2019 1:19 pm โดย บุคคลทั่วไป
R - ต้องการเพิ่มการแสดงรายการบนใบแจ้งหนี้
โดย EyePornnipa พฤ 22 ส.ค. 2019 12:43 pm บอร์ด M.D.Soft Co.,Ltd. - Tester
0
3
พฤ 22 ส.ค. 2019 12:43 pm โดย EyePornnipa
เขียนวิธีการเดินจากบ้านมา กทม จากคลอง 3 หมู่บ้านพฤกษา 13 มา เสนานิคม
โดย aninthana พฤ 22 ส.ค. 2019 12:21 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
1
17
พฤ 22 ส.ค. 2019 2:25 pm โดย mindphp
note
โดย aninthana พฤ 22 ส.ค. 2019 11:10 am บอร์ด M092 - อนินธนา บุญยัง
1
7
พฤ 22 ส.ค. 2019 6:38 pm โดย aninthana
Work's on Hand อนินธนา บุญยัง M092
โดย aninthana พฤ 22 ส.ค. 2019 11:10 am บอร์ด M092 - อนินธนา บุญยัง
1
12
พฤ 22 ส.ค. 2019 6:34 pm โดย aninthana
Job description ที่เคยทำมาแต่ละบริษัท โดยระบุประเภทธุรกิจทำมา
โดย aninthana พฤ 22 ส.ค. 2019 11:08 am บอร์ด M092 - อนินธนา บุญยัง
1
16
พฤ 22 ส.ค. 2019 11:37 am โดย aninthana
งานประจำวันที่ 22 สิงหาคม 2562
โดย aninthana พฤ 22 ส.ค. 2019 11:04 am บอร์ด M092 - อนินธนา บุญยัง
1
18
พฤ 22 ส.ค. 2019 11:06 am โดย aninthana
งานประจำวันที่ 22 สิงหาคม 2562
โดย jirawoot พฤ 22 ส.ค. 2019 10:23 am บอร์ด M090 - นายจิระวุฒิ อัครลิขิตกุล
0
3
พฤ 22 ส.ค. 2019 10:23 am โดย jirawoot
งานประจำวันที่ 22 สิงหาคม 2562
โดย chatee supasand พฤ 22 ส.ค. 2019 10:10 am บอร์ด MT33 - นายชาตรี สุภาแสน
0
1
พฤ 22 ส.ค. 2019 10:10 am โดย chatee supasand
งานประจำวันที่ 22 สิงหาคม 2562
โดย Patipat พฤ 22 ส.ค. 2019 10:07 am บอร์ด M088 - ปฏิภัทร สารธรรม
0
3
พฤ 22 ส.ค. 2019 10:07 am โดย Patipat
งานประจำวันที่ 22 กรกฎาคม 2562
โดย jamepiyawat พฤ 22 ส.ค. 2019 10:01 am บอร์ด M084 - นายปิยวัช เชาว์วิมล
0
2
พฤ 22 ส.ค. 2019 10:01 am โดย jamepiyawat
งานประจำวันที่ 22 สิงหาคม 2562
โดย EyePornnipa พฤ 22 ส.ค. 2019 9:40 am บอร์ด M089 - นางสาวพรนิภา ราชธานี
0
6
พฤ 22 ส.ค. 2019 9:40 am โดย EyePornnipa