Hướng dẫn do you have to name a function in javascript? - bạn có phải đặt tên cho một hàm trong javascript không?

Thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 chỉ đọc của đối tượng cho biết tên của hàm được chỉ định khi nó được tạo hoặc nó có thể là
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
5 hoặc
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
6 (một chuỗi trống) cho các hàm được tạo ẩn danh.
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4
property indicates the function's name as specified when it was created, or it may be either
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
5 or
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
6 (an empty string) for functions created anonymously.

Thử nó

Lưu ý: Trong các triển khai không chuẩn, Pre-ES2015, thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
7 cũng là
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
8.
In non-standard, pre-ES2015 implementations the
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
7 attribute was
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
8 as well.

Sự mô tả

Thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 của chức năng có thể được sử dụng để xác định chức năng trong các công cụ gỡ lỗi hoặc thông báo lỗi. Nó không có ý nghĩa ngữ nghĩa đối với chính ngôn ngữ.

Thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 chỉ được đọc và không thể thay đổi bởi toán tử gán:

function someFunction() {}

someFunction.name = 'otherFunction';
console.log(someFunction.name); // someFunction

Để thay đổi nó, sử dụng

new Function().name; // "anonymous"
1.

Thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 thường được suy ra từ cách xác định hàm. Trong các phần sau, chúng tôi sẽ mô tả các cách khác nhau mà nó có thể được suy ra.

Tuyên bố chức năng

Thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 trả về tên của một khai báo chức năng.

function doSomething() {}
doSomething.name; // "doSomething"

Tuyên bố chức năng xuất hiện mặc định

Tuyên bố

new Function().name; // "anonymous"
4 xuất hàm dưới dạng khai báo thay vì biểu thức. Nếu tuyên bố là ẩn danh, tên là
new Function().name; // "anonymous"
5.

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"

Hàm tạo chức năng

Các chức năng được tạo với hàm tạo

new Function().name; // "anonymous"
6 có tên là "ẩn danh".

new Function().name; // "anonymous"

Biểu thức chức năng

Nếu biểu thức hàm được đặt tên, tên đó được sử dụng làm thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4.

const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"

Các biểu thức chức năng ẩn danh được tạo bằng cách sử dụng từ khóa

new Function().name; // "anonymous"
8 hoặc các hàm mũi tên sẽ có
new Function().name; // "anonymous"
9 (một chuỗi trống) làm tên của chúng.

(function () {}).name; // ""
(() => {}).name; // ""

Tuy nhiên, những trường hợp như vậy là rất hiếm - thông thường, để chỉ biểu thức ở nơi khác, biểu thức hàm được gắn vào một định danh khi nó được tạo (chẳng hạn như trong một khai báo biến). Trong những trường hợp như vậy, tên có thể được suy ra, vì một vài tiểu mục sau đây chứng minh.

Một trường hợp thực tế trong đó tên không thể được suy ra là một hàm được trả về từ một hàm khác:

function getFoo() {
  return () => {};
}
getFoo().name; // ""

Khai báo và phương pháp biến

Các biến và phương thức có thể suy ra tên của một hàm ẩn danh từ vị trí cú pháp của nó.

const f = function () {};
const object = {
  someMethod: function () {}
};

console.log(f.name); // "f"
console.log(object.someMethod.name); // "someMethod"

Điều tương tự áp dụng cho bài tập:

let f;
f = () => {};
f.name; // "f"

Khởi tạo và giá trị mặc định

Các chức năng trong các bộ khởi tạo (giá trị mặc định) của phá hủy, tham số mặc định, trường lớp, v.v., sẽ kế thừa tên của định danh bị ràng buộc là

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 của chúng.

const [f = () => {}] = [];
f.name; // "f"

const { someMethod: m = () => {} } = {};
m.name; // "m"

function foo(f = () => {}) {
  console.log(f.name);
}
foo(); // "f"

class Foo {
  static someMethod = () => {};
}
Foo.someMethod.name; // someMethod

Phương pháp tốc ký

function doSomething() {}
doSomething.name; // "doSomething"
0

Chức năng ràng buộc

const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"
1 tạo ra một hàm có tên là "ràng buộc" cộng với tên hàm.

function doSomething() {}
doSomething.name; // "doSomething"
1

Getter và setter

Khi sử dụng các thuộc tính của

const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"
2 và
const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"
3, "GET" hoặc "SET" sẽ xuất hiện trong tên hàm.

function doSomething() {}
doSomething.name; // "doSomething"
2

Lớp

Tên của một lớp theo cùng một thuật toán như các khai báo và biểu thức hàm.

function doSomething() {}
doSomething.name; // "doSomething"
3

Cảnh báo: JavaScript sẽ đặt thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 của hàm chỉ khi một hàm không có thuộc tính riêng gọi là
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4. Tuy nhiên, các thành viên tĩnh của các lớp sẽ được đặt làm thuộc tính riêng của hàm xây dựng lớp và do đó ngăn chặn
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 tích hợp được áp dụng. Xem một ví dụ dưới đây.
JavaScript will set the function's
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 property only if a function does not have an own property called
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4. However, classes' static members will be set as own properties of the class constructor function, and thus prevent the built-in
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 from being applied. See an example below.

Biểu tượng là tên hàm

Nếu

const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"
7 được sử dụng tên hàm và biểu tượng có mô tả, tên của phương thức là mô tả trong dấu ngoặc vuông.

function doSomething() {}
doSomething.name; // "doSomething"
4

Tài sản cá nhân

Các trường riêng và các phương thức riêng có hàm băm (

const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"
8) như một phần của tên của họ.

function doSomething() {}
doSomething.name; // "doSomething"
5

Ví dụ

Nói tên hàm tạo của một đối tượng

Bạn có thể sử dụng

const someFunction = function someFunctionName() {};
someFunction.name; // "someFunctionName"
9 để kiểm tra "lớp" của một đối tượng.

function doSomething() {}
doSomething.name; // "doSomething"
6

Tuy nhiên, vì các thành viên tĩnh sẽ trở thành thuộc tính riêng của lớp, chúng tôi không thể có được tên lớp cho hầu như bất kỳ lớp nào có thuộc tính Phương thức tĩnh

(function () {}).name; // ""
(() => {}).name; // ""
0:

function doSomething() {}
doSomething.name; // "doSomething"
7

Với phương thức

(function () {}).name; // ""
(() => {}).name; // ""
1
(function () {}).name; // ""
(() => {}).name; // ""
2 không còn giữ tên lớp thực tế mà là một tham chiếu đến đối tượng hàm
(function () {}).name; // ""
(() => {}).name; // ""
0. Cố gắng để có được lớp
(function () {}).name; // ""
(() => {}).name; // ""
4 thông qua
(function () {}).name; // ""
(() => {}).name; // ""
5 sẽ không cho chúng tôi tên lớp, mà thay vào đó là một tham chiếu đến phương thức lớp tĩnh. Thí dụ:

function doSomething() {}
doSomething.name; // "doSomething"
8

Do sự tồn tại của các trường tĩnh,

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 cũng có thể không phải là một hàm.

function doSomething() {}
doSomething.name; // "doSomething"
9

Nếu một lớp có một thuộc tính tĩnh được gọi là

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4, nó cũng sẽ trở nên có thể ghi được. Định nghĩa tích hợp trong trường hợp không có định nghĩa tĩnh tùy chỉnh chỉ được đọc:

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
0

Do đó, bạn không thể dựa vào thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 tích hợp để luôn giữ tên của một lớp.

Máy nén JavaScript và máy tính

CẢNH BÁO: Hãy cẩn thận khi sử dụng thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 với các biến đổi mã nguồn, chẳng hạn như các biến đổi được thực hiện bởi máy nén JavaScript (minifi) hoặc obfuscators. Các công cụ này thường được sử dụng như một phần của đường ống xây dựng JavaScript để giảm quy mô của một chương trình trước khi triển khai nó để sản xuất. Các phép biến đổi như vậy thường thay đổi tên của một hàm tại thời điểm xây dựng. Be careful when using the
// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4 property with source-code transformations, such as those carried out by JavaScript compressors (minifiers) or obfuscators. These tools are often used as part of a JavaScript build pipeline to reduce the size of a program prior to deploying it to production. Such transformations often change a function's name at build time.

Mã nguồn như:

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
1

có thể được nén vào:

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
2

Trong phiên bản không nén, chương trình chạy vào nhánh Truthy và ghi lại "'foo' là một ví dụ của 'foo'" - trong khi, trong phiên bản nén, nó hoạt động khác nhau và chạy vào nhánh khác. Nếu bạn dựa vào thuộc tính

// -- someModule.js --
export default function () {};

// -- main.js --
import someModule from "./someModule.js";

someModule.name; // "default"
4, như trong ví dụ trên, hãy đảm bảo đường ống xây dựng của bạn không thay đổi tên chức năng hoặc không giả sử hàm có tên cụ thể.

Thông số kỹ thuật

Sự chỉ rõ
Đặc tả ngôn ngữ Ecmascript # Sec-Chế độ-INSTANCES-NAME
# sec-function-instances-name

Tính tương thích của trình duyệt web

Bảng BCD chỉ tải trong trình duyệt

Xem thêm

  • Thuộc tính polyfill cho chức năng '
    function getFoo() {
      return () => {};
    }
    getFoo().name; // ""
    
    1 có sẵn trong
    function getFoo() {
      return () => {};
    }
    getFoo().name; // ""
    
    2
  • // -- someModule.js --
    export default function () {};
    
    // -- main.js --
    import someModule from "./someModule.js";
    
    someModule.name; // "default"
    
    3

Các chức năng JavaScript có cần một tên không?

Các chức năng được lưu trữ trong các biến không cần tên chức năng.Chúng luôn được gọi (được gọi) bằng cách sử dụng tên biến.. They are always invoked (called) using the variable name.

Làm thế nào để bạn đặt tên cho một hàm javascript?

Hàm JavaScript được xác định với từ khóa chức năng, theo sau là tên, theo sau là dấu ngoặc đơn ().Tên chức năng có thể chứa các chữ cái, chữ số, dấu gạch dưới và dấu hiệu đô la (cùng quy tắc với các biến).the function keyword, followed by a name, followed by parentheses (). Function names can contain letters, digits, underscores, and dollar signs (same rules as variables).

Có thể chức năng ẩn danh trong JavaScript?

Hàm ẩn danh là một hàm không có bất kỳ tên nào liên quan đến nó.Thông thường chúng tôi sử dụng từ khóa chức năng trước tên hàm để xác định hàm trong JavaScript, tuy nhiên, trong các hàm ẩn danh trong JavaScript, chúng tôi chỉ sử dụng từ khóa chức năng mà không có tên hàm.in anonymous functions in JavaScript, we use only the function keyword without the function name.

Hàm không có tên gọi là gì?

Các hàm ẩn danh là các hàm được khai báo động khi chạy.Chúng được gọi là các chức năng ẩn danh vì chúng không được đặt tên giống như các hàm bình thường. are functions that are dynamically declared at runtime. They're called anonymous functions because they aren't given a name in the same way as normal functions.