NFE

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具备函数作用域,只引用当前函数。

 

posted @ 2020-12-17 13:42  李逍遥701  阅读(505)  评论(0)    收藏  举报