首先看一下下面的代码
var a = function b() { console.log(b); // function b() {console.log(b);} }; a(); console.log(b); // Uncaught ReferenceError: b is not defined
析:
上述代码中,b是一个具名函数,一般我们定义一个变量方法如下:
var a = function() { };
使用的匿名函数。
那么使用具名函数表达式有什么作用以及有哪些需要注意的地方呢?
先说一个概念:
具名函数表达式的函数名只在函数内部有效,在函数外部无效。
var a = function b() { console.log(b); // function b() {console.log(b);} };
JavaScript代码在定义变量的时候即为变量分配了内存。
在预编译阶段,我们首先定义了一个变量a,并为其分配内存。
在执行a方法时,才定义b方法,所以b函数是在a方法的执行阶段定义的变量,是局部变量。
那么具名函数有什么用呢?
当你需要在函数内部知道具体哪个调用了本函数时,你可能会想在代码里获取函数的名字,而且你不用管具名函数如何命名,它不会影响作用域,因为只在执行时有效。
参考文章:
Javascript functions like “var foo = function bar() …”?