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

ปัจจุบัน 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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
วิธีการลงทุนที่ดีที่สุดสำหรับ "มนุษย์เงินเดือน"
โดย somying อ 12 พ.ย. 2019 12:13 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
2
262
จ 25 พ.ย. 2019 5:58 am โดย tidehunter
ไปรษณีย์ไทยเอาใจ e-commerce ด้วยบริการ ePacket
โดย numtan5839 ส 09 พ.ย. 2019 11:21 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
2
189
จ 09 ธ.ค. 2019 3:21 pm โดย LEG
อัพเดดความคืบหน้า / Progress - AZKing
โดย mindphp อ 29 มิ.ย. 2014 5:47 pm บอร์ด AZKing (Main)
598
3298
อ 03 ธ.ค. 2019 6:34 pm โดย thatsawan
insert แล้วไม่ขึ้น error ไม่มีข้อความไดเกิดขึ้น ไม่บันทึกข้อมูลลงฐานข้อมูลด้วยคับ
โดย สายลม พ 06 พฤษภาคม 2015 8:20 am บอร์ด Programming - PHP
6
3389
ส 23 พ.ย. 2019 9:50 pm โดย Weerawut Wongdang
Animation ประกอบ Tools
โดย numtan5839 ส 23 พ.ย. 2019 7:21 pm บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
8
56
ศ 13 ธ.ค. 2019 6:37 pm โดย numtan5839
ข้อแตกต่าง ระหว่าง ฟังก์ชัน onContentBeforeDisplay กับ onContentAfterDisplay
โดย bankjittapol ส 23 พ.ย. 2019 6:56 pm บอร์ด Joomla Developing Knowledge
0
41
ส 23 พ.ย. 2019 6:56 pm โดย bankjittapol
หน่วยของค่าที่ใช้ต่างๆ ใน CSS
โดย bankjittapol ส 23 พ.ย. 2019 6:20 pm บอร์ด CSS Knowledge
0
45
ส 23 พ.ย. 2019 6:20 pm โดย bankjittapol
งานประจำวันที่ 23 พฤศจิกายน 2562
โดย numtan5839 ส 23 พ.ย. 2019 10:17 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
6
29
ส 23 พ.ย. 2019 7:22 pm โดย numtan5839
จะแปลง {new} {/new} {update} {/update} {bug} {/bug} ให้เป็นตามรูปยังไงครับ(ตามรูปที่แนบไว้)
โดย bankjittapol ส 23 พ.ย. 2019 5:08 pm บอร์ด Joomla Development
0
60
ส 23 พ.ย. 2019 5:08 pm โดย bankjittapol
จะเอาเลขเวอร์ชั่น และวันที่ ที่อยู่ข้างใน {version} ออกมายังไงครับ
โดย bankjittapol ส 23 พ.ย. 2019 3:39 pm บอร์ด Joomla Development
2
62
ส 23 พ.ย. 2019 3:56 pm โดย bankjittapol
มาแล้ว !! Plugin MDEmbed สร้าง Link อัพวีดีโอบทความ เว็บไซต์ Joomla 2.5, 3.x
โดย Patipat ศ 30 ส.ค. 2019 5:46 pm บอร์ด MindPHP News & Feedback
1
299
ส 23 พ.ย. 2019 11:11 am โดย mindphp
รวม แนะนำโปรแกรม POS (ระบบขายหน้าร้าน)
โดย nipon09 พฤ 06 พ.ย. 2014 7:09 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
5
7609
ส 23 พ.ย. 2019 1:30 am โดย nightstalker
การใช้ text-align เพื่อจัดข้อความ
โดย bankjittapol ศ 22 พ.ย. 2019 6:28 pm บอร์ด CSS Knowledge
0
57
ศ 22 พ.ย. 2019 6:28 pm โดย bankjittapol
อยากทราบคำสั่ง joomla ที่จะทำให้ย่อยรูปได้ครับ
โดย jamepiyawat ศ 22 พ.ย. 2019 5:53 pm บอร์ด Joomla Development
1
76
ศ 22 พ.ย. 2019 8:35 pm โดย mindphp
วิธีการการใช้งาน jquery เพื่อปรับเปลี่ยนค่า css ให้กับปุ่มเมื่อมีการคลิก
โดย Ittichai_chupol ศ 22 พ.ย. 2019 5:41 pm บอร์ด Jquery & Ajax Knowledge
0
77
ศ 22 พ.ย. 2019 5:41 pm โดย Ittichai_chupol
การใส่ Intro Outro และการตัดต่อ VDO ด้วยโปรแกรม โปรแกรม Sony Vagas Pro
โดย numtan5839 ศ 15 พ.ย. 2019 1:41 pm บอร์ด Graphic design
0
65
ศ 15 พ.ย. 2019 1:41 pm โดย numtan5839
ข้อดีข้อเสียของ SAP
โดย kanchanok พฤ 05 เม.ย. 2018 9:31 am บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
1
2896
ศ 22 พ.ย. 2019 4:57 pm โดย mindphp
วิธีการเปลี่ยนการแสดงผล ส่วนการจัดการกระทู้ที่ติดตาม ของ phpbb
โดย Ittichai_chupol ศ 22 พ.ย. 2019 4:07 pm บอร์ด PHP Knowledge
0
65
ศ 22 พ.ย. 2019 4:07 pm โดย Ittichai_chupol
.net ถ้าจะใช้ Entity Framework โดยไม่ต้องลงตัว Oracle Data Access Client (ODAC)
โดย jataz2 ศ 22 พ.ย. 2019 3:23 pm บอร์ด Programming - C/C++ & java & Python
0
79
ศ 22 พ.ย. 2019 3:23 pm โดย jataz2
โปรแกรมหาค่าเฉลี่ย, ค่าแปรปรวน และค่าเบี่ยงเบนมาตรฐาน
โดย prmindphp ศ 22 พ.ย. 2019 10:40 am บอร์ด MindPHP News & Feedback
0
91
ศ 22 พ.ย. 2019 10:40 am โดย prmindphp