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

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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
การเพิ่มข้อมูลใน ArrayList ภาษา Java
โดย Grammanano จ 09 ธ.ค. 2019 6:19 pm บอร์ด Share Knowledge
0
16
จ 09 ธ.ค. 2019 6:19 pm โดย Grammanano
การทำงานแบบ Multitasking เหมาะกับใคร - การทำหลาย ๆ อย่างพร้อมกัน
โดย noppadonsk จ 09 ธ.ค. 2019 6:06 pm บอร์ด Share Knowledge
0
21
จ 09 ธ.ค. 2019 6:06 pm โดย noppadonsk
บทเรียนสำหรับนักออกแบบมือใหม่
โดย noppadonsk จ 09 ธ.ค. 2019 5:48 pm บอร์ด Share Knowledge
0
29
จ 09 ธ.ค. 2019 5:48 pm โดย noppadonsk
มาดูเทรนด์สีมาแรง ในปี 2020
โดย noppadonsk จ 09 ธ.ค. 2019 5:18 pm บอร์ด Graphic design
0
27
จ 09 ธ.ค. 2019 5:18 pm โดย noppadonsk
วิธีการปรับแก้ไขลิ้งค์จากหัวข้อ ให้ไปยังตำแหน่งโพสต์ ที่ยังไม่มีการอ่าน ใน phpbb
โดย Ittichai_chupol จ 09 ธ.ค. 2019 5:16 pm บอร์ด PHP Knowledge
0
21
จ 09 ธ.ค. 2019 5:16 pm โดย Ittichai_chupol
ภาพประกอบ template Mooziicart Helix
โดย numtan5839 จ 09 ธ.ค. 2019 4:29 pm บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
0
4
จ 09 ธ.ค. 2019 4:29 pm โดย numtan5839
VDO - Introducing to Mooziicart Helix - Template MooZiicart
โดย numtan5839 จ 09 ธ.ค. 2019 3:56 pm บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
2
8
จ 09 ธ.ค. 2019 5:43 pm โดย numtan5839
VDO - Introducing to Mooziicart coupon feature
โดย numtan5839 จ 09 ธ.ค. 2019 11:30 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
4
18
พฤ 12 ธ.ค. 2019 11:18 am โดย numtan5839
การสร้าง ArrayList ในภาษา Java
โดย Grammanano จ 09 ธ.ค. 2019 11:28 am บอร์ด Share Knowledge
0
19
จ 09 ธ.ค. 2019 11:28 am โดย Grammanano
เพิ่ม primary key ใน pgadmin แล้ว error ค่ะ
โดย Grammanano จ 09 ธ.ค. 2019 11:15 am บอร์ด SQL - Database
0
23
จ 09 ธ.ค. 2019 11:15 am โดย Grammanano
งานประจำวันที่ 9 ธันวาคม 2562
โดย noppadonsk จ 09 ธ.ค. 2019 10:19 am บอร์ด MT36 - นายนพดล สุชญากูล
2
20
จ 09 ธ.ค. 2019 7:15 pm โดย jamepiyawat
งานประจำวันที่ 9 ธันวาคม 2562
โดย numtan5839 จ 09 ธ.ค. 2019 10:14 am บอร์ด M097 - ตรีเนตร บูรณโพธิ์ทอง
2
12
จ 09 ธ.ค. 2019 7:51 pm โดย numtan5839
Work shop ทำใบปริ้นท์ด้วย RML
โดย Grammanano จ 09 ธ.ค. 2019 10:06 am บอร์ด M098 - อนงค์นาท ไฝขาว
0
3
จ 09 ธ.ค. 2019 10:06 am โดย Grammanano
งานประจำวันที่ 9 ธันวาคม 2562
โดย Grammanano จ 09 ธ.ค. 2019 10:02 am บอร์ด M098 - อนงค์นาท ไฝขาว
4
21
จ 09 ธ.ค. 2019 7:19 pm โดย Grammanano
คำสั่งสร้างชื่อผู้ใช้ใน postgres Command Create User on PostgreSQL
โดย mindphp จ 09 ธ.ค. 2019 4:48 am บอร์ด PostgreSQL
2
27
จ 09 ธ.ค. 2019 5:39 am โดย mindphp
วิธีใช้โปรแกรม Weka ในการทำนายข้อมูล
โดย Grammanano ส 07 ธ.ค. 2019 6:54 pm บอร์ด Share Knowledge
0
30
ส 07 ธ.ค. 2019 6:54 pm โดย Grammanano
พื้นฐาน RML เพื่อทำใบปริ้นท์ในระบบ ERP
โดย Grammanano ส 07 ธ.ค. 2019 4:58 pm บอร์ด M098 - อนงค์นาท ไฝขาว
1
10
ส 07 ธ.ค. 2019 5:47 pm โดย Grammanano
แนะนำฟีเจอร์ Coupons ของ MooZiiCart ตัวช่วย ทำ คูปองส่วนลด ในเว็บขายของ สำหรับร้านค้าออนไลน์ ที่จะกระตุ้นยอดขายบางช่วง
โดย prmindphp ส 07 ธ.ค. 2019 3:56 pm บอร์ด MindPHP News & Feedback
0
40
ส 07 ธ.ค. 2019 3:56 pm โดย prmindphp
ใน ปล๊กอิน เราสามารถนำข้อความในไฟล์ภาษาออกมาแสดงได้อย่างไร ครับ
โดย jamepiyawat ส 07 ธ.ค. 2019 2:21 pm บอร์ด Joomla Development
0
21
ส 07 ธ.ค. 2019 2:21 pm โดย jamepiyawat
Block IP เข้าเว็บ เซิร์ฟเวอร์ เป็นข่วง ด้วย .htaccess
โดย mindphp ส 07 ธ.ค. 2019 2:12 pm บอร์ด Linux - Web Server
2
1429
อ 08 ธ.ค. 2019 11:17 am โดย mindphp