เป็นไปได้ไหมที่จะส่งออกฟังก์ชัน Arrow ใน ES6 / 7


106

คำสั่งการส่งออกด้านล่างแสดงข้อผิดพลาดทางไวยากรณ์

export default const hello = () => console.log("say hello")

เพราะอะไร?

ฉันสามารถส่งออกฟังก์ชันที่มีชื่อเท่านั้น

export function hello() {
  console.log("hello")
}

เหตุผลคืออะไร?


4
ข้อผิดพลาดพูดว่าอะไร?
Andy

2
ทำงานได้ดีที่นี่: astexplorer.net/#/0fv5UXttsP
Felix Kling

อ่านได้ที่นี่: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
John

1
ข้อผิดพลาดทางไวยากรณ์คืออะไร?
omarjmh

1
คุณไม่สามารถตั้งชื่อการส่งออกเริ่มต้น
Felix Kling

คำตอบ:


171

เป็นไปได้ไหมที่จะส่งออกฟังก์ชัน Arrow ใน ES6 / 7

ใช่. exportไม่สนใจมูลค่าที่คุณต้องการส่งออก

คำสั่งการส่งออกด้านล่างให้ข้อผิดพลาดทางไวยากรณ์ ... ทำไม?

คุณไม่สามารถส่งออกเริ่มต้นและตั้งชื่อให้ได้("ค่าเริ่มต้น" เป็นชื่อของการส่งออกอยู่แล้ว)

ทำอย่างใดอย่างหนึ่ง

export default () => console.log("say hello");

หรือ

const hello = () => console.log("say hello");
export default hello;

4
ด้านล่างนี้ทำงานอย่างไรแล้วส่งออกค่าเริ่มต้น hello = () => {console.log ("why the downvote")}
jozzy

3
x = yyคือการแสดงออกซึ่งได้รับมอบหมายมีมติให้ค่าของ ไม่ใช่การประกาศตัวแปร คุณสามารถใส่x = yทุกที่ที่คุณใส่นิพจน์ได้ หมายเหตุ:สิ่งนี้จะเข้าสู่โหมดเข้มงวดหากxไม่ได้กำหนดไว้ล่วงหน้า
Felix Kling

2
แล้วการส่งออกปกติล่ะ? เป็นไปได้ไหมที่จะทำสิ่งที่ชอบ: export () => {/*body*/} as getUsers;? หรือฉันต้องกำหนดก่อนแล้วจึงส่งออก?
Tomasz Mularczyk

44
@Tomasz:export const getUser = () => {...};
Felix Kling

3
@ Burrich: ไม่สำคัญว่าฟังก์ชันจะถูกสร้างขึ้นอย่างไรตราบเท่าที่สามารถใช้งานได้ตามที่ควรจะเป็น
Felix Kling

19

หากคุณไม่ต้องการส่งออกเริ่มต้นคุณสามารถส่งออกฟังก์ชันที่มีชื่อด้วยไวยากรณ์นี้:

export const yourFunctionName = () => console.log("say hello");

ดังนั้นคุณสามารถแทนที่ด้วยexport function yourFunctionName () { export const yourFunctionName = () => ความยาวอักขระเท่ากัน แต่มีโอกาสสูงที่จะพิมพ์ผิดในส่วน= () =>นี้ จริงๆแล้วสำหรับฉันมันรู้สึกอ่านน้อยลงและทำงานได้มากขึ้น :)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.