Named Function Expression
1 let sayHi=function fname(who) { 2 alert(`hello, ${who}`); 3 };
1 let sayHi = function fname(who) { 2 if (who) { 3 alert(`Hello, ${who}`); 4 } else { 5 fname("Guest"); // 使用 func 再次调用函数自身 6 } 7 }; 8 9 sayHi(); // Hello, Guest 10 11 // 但这不工作: 12 fname(); // Error, func is not defined(在函数外不可见)
fname("fly");
fname就是函数的名字,fname()就是在调用函数。
注意,函数本身包含这条语句,但这条语句又调用了这个函数,难道还要继续调用自己吗?
答案是否定的,因为这样毫无意义。
看起来就像函数在自己的身体内部又生了个自己。
利用fname调用函数的方式只能在函数内部使用,在外部调用无效。
为何要使用fname?
sayHi是一个变量,它引用一个函数。
改变它的指向,使它指向null,也就是不指向任何函数。
let welcome=sayHi;
此时sayHi就代表了函数,所以将其看成函数是极其重要的,所谓看山不是山。
welcome变量指向了这个函数。
如果使用welcome()调用此函数,此时,函数内部中的“自我调用”sayHi("fly")"就无效了,因为sayHi啥也是现在。
fname具备函数作用域,只引用当前函数。