การประกาศฟังก์ชั่น
function foo () {}ฟังก์ชั่น FOO จะถูกยกขึ้นก่อนที่โปรแกรมทั้งหมดจะถูกดำเนินการดังนั้นจึงมีอยู่ในขอบเขตทั้งหมด (ขอบเขต) ที่กำหนดฟังก์ชั่น FOO แม้แต่การเรียกมันก่อนที่นิยามฟังก์ชั่นก็โอเค
foo (); // ใช้งานได้เพราะ foo ถูกสร้างขึ้นก่อนที่รหัสนี้ runsfunction foo () {}เนื่องจากฉันวางแผนที่จะเขียนบทความแนะนำขอบเขตโดยเฉพาะฉันจะไม่อธิบายรายละเอียดที่นี่
การแสดงออกของฟังก์ชั่น
สำหรับการประกาศฟังก์ชั่นชื่อของฟังก์ชั่นเป็นสิ่งจำเป็น แต่สำหรับการแสดงออกของฟังก์ชั่นมันเป็นทางเลือก ดังนั้นการแสดงออกของฟังก์ชั่นที่ไม่ระบุชื่อและการแสดงออกของฟังก์ชั่นที่มีชื่อจึงปรากฏขึ้น ดังนี้:
การประกาศฟังก์ชั่น: ฟังก์ชั่นฟังก์ชั่นชื่อ () {}
การประกาศฟังก์ชั่น: ฟังก์ชั่นฟังก์ชั่นชื่อ [ตัวเลือก] () {}
จากนั้นฉันรู้ว่าหากไม่มีชื่อฟังก์ชั่นมันจะต้องเป็นนิพจน์ฟังก์ชั่น แต่เราจะตัดสินได้อย่างไรว่ามีชื่อฟังก์ชั่น?
JavaScript ระบุว่าหากร่างกายฟังก์ชั่นทั้งหมดเป็นส่วนหนึ่งของนิพจน์แล้วมันจะเป็นนิพจน์ฟังก์ชันมิฉะนั้นจะเป็นการประกาศฟังก์ชั่น ต่อไปนี้คือนิพจน์:
var fuc = foo () {}ขอตัวอย่างการแสดงออกที่รุนแรงอีกสองสามตัวอย่าง:
! function foo () {} true && function foo () {}ข้อความข้างต้นเป็นเพียงการแยกแยะการแสดงออกของฟังก์ชั่นและโดยทั่วไปแล้วพวกเขาไม่ได้เขียนเช่นนี้ จากนั้นใช้ตัวอย่างการเปรียบเทียบเพื่อดูเอฟเฟกต์:
foo1 (); // foo1 ไม่ได้กำหนด foo2 (); // ใช้งานได้เพราะ foo2 ถูกสร้างขึ้นก่อนที่รหัสนี้จะทำงาน! ฟังก์ชั่น foo1 () {แจ้งเตือน ('foo1 works');}; ฟังก์ชั่น foo2 () {แจ้งเตือน ('foo2 works');};};นิพจน์ฟังก์ชั่นที่ไม่ระบุชื่อ
var foo = function () {};ตัวอย่างข้างต้นกำหนดฟังก์ชันที่ไม่ระบุชื่อให้กับตัวแปร Foo
ฟู; // 'undefined'foo (); // สิ่งนี้ทำให้ typeerRoRvar foo = function () {};เนื่องจาก VAR เป็นคำประกาศตัวแปร Foo จึงถูกยกขึ้น (โปรโมต) ที่นี่ดังนั้นเมื่อโปรแกรมถูกดำเนินการตัวแปร Foo จึงเรียกได้
อย่างไรก็ตามเนื่องจากคำสั่งที่ได้รับมอบหมายจะมีผลเมื่อใช้งานรันไทม์ค่าของตัวแปร FOO จึงไม่ได้กำหนด
ชื่อการแสดงออกของฟังก์ชั่น
อีกสิ่งหนึ่งที่ต้องพูดถึงคือการกำหนดฟังก์ชั่นที่มีชื่อ
var foo = bar function () {bar (); // works}; bar (); // ReferenceRorrorที่นี่แถบฟังก์ชั่นที่มีชื่อถูกกำหนดให้กับตัวแปร Foo ดังนั้นจึงมองไม่เห็นนอกการประกาศฟังก์ชั่น แต่ยังสามารถเรียกได้ภายในฟังก์ชั่นบาร์ นี่เป็นเพราะกลไกของ JavaScript สำหรับฟังก์ชั่นการตั้งชื่อชื่อของฟังก์ชั่นนั้นใช้ได้ในขอบเขตภายในฟังก์ชันเสมอ