函数名
- 因为函数名就是指向函数的指针,所以它们跟其他包含对象指针的变量具有相同的行为。意味着一个函数可以有多个名称,如下所示:
function sum(num1, num2) { return num1 + num2; } console.log(sum(1, 2)); // 3 let anotherSum = sum; console.log(anotherSum(1, 2)); // 3 sum = null; console.log(anotherSum(1, 2)); // 3 - 以上代码定义了一个名为 sum()的函数,用于求两个数的和。然后又声明了一个变量 anothSum,并将它的值设置为等于 sum。注意,使用不带括号的函数名会访问函数指针,而不会执行函数。此时 anotherSum 和 sum 都指向同一个函数。调用 anotherSum()也可以返回结果。把 sum 设置为 null 之后,就切断了它与函数之间的关联。而 anotherSum()还是可以照常调用,没有问题。
- ECMAScript6 的所有函数对象都会暴露一个只读的 name 属性,其中包含关于函数的信息。多数情况下,这个属性中保存的就是一个函数标识符,或者说是一个字符串化的变量名。即使函数没有名称,也会如实显示空字符串。如果它是使用 Function 构造函数创建的,则会标识成 "anonymous";
function foo() {} let bar = function () {}; let baz = () => {}; console.log(foo.name); // foo console.log(bar.name); // bar console.log(baz.name); // baz console.log((() => {}).name); // '' console.log(new Function().name); // anonymous