Function là value
Trong các ngôn ngữ khác, function đôi khi có vị trí đặc biệt. Trong một số ngôn ngữ, khai báo biến cùng tên không gây lỗi, nhưng định nghĩa function cùng tên lại gây lỗi. Trong ngôn ngữ khác, không thể gán function vào biến.
Function trong JavaScript là value. Nghĩa là, so với các ngôn ngữ khác như PHP, nó ít được đối xử đặc biệt hơn. Ví dụ, bạn có thể gán function vào biến.
jsfunctionhello () {return "Hello World";}consthelloWorld =hello ; // Gán function vào biếnhelloWorld (); // Gọi function cũng không có vấn đề
jsfunctionhello () {return "Hello World";}consthelloWorld =hello ; // Gán function vào biếnhelloWorld (); // Gọi function cũng không có vấn đề
Ngoài ra, trong JavaScript, bạn có thể khai báo function có cùng tên với function đã định nghĩa. Điều này không gây lỗi. Về bản chất, điều này hoạt động như reassignment.
jsfunctionhello () {return "HELLO";}// Đây là lần khai báo function thứ hai, nhưng về bản chất là reassignmentfunctionhello () {return "KONNICHIWA";}hello ();
jsfunctionhello () {return "HELLO";}// Đây là lần khai báo function thứ hai, nhưng về bản chất là reassignmentfunctionhello () {return "KONNICHIWA";}hello ();
Như vậy, function trong JavaScript có tính chất như value giống như giá trị boolean hoặc string. Reassignment không mong muốn có thể gây bug, nhưng trong JavaScript, với function declaration không có cách nào khác ngoài viết cẩn thận.
Trong JavaScript, nếu muốn tránh bug do reassignment function, hãy kết hợp const và function expression. Function expression sẽ được đề cập sau.
jsconsthello = function () {return "HELLO";};
jsconsthello = function () {return "HELLO";};
Nhân tiện, trong TypeScript, compiler sẽ cảnh báo khai báo function trùng lặp nên không lo lắng về bug.
Scope của function
Vì function là value, tên function cũng có khái niệm scope giống như biến. Ví dụ, function được định nghĩa bên trong function scope chỉ có thể được sử dụng trong local scope đó.
jsfunctionmain () {// Function trong local scopefunctionhello () {console .log ("hello");}hello ();}main ();// Không thể truy cập function được khai báo trong local scopehello ();
jsfunctionmain () {// Function trong local scopefunctionhello () {console .log ("hello");}hello ();}main ();// Không thể truy cập function được khai báo trong local scopehello ();