具名函数

首先看一下下面的代码

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() …”?

此条目发表在JavaScript分类目录。将固定链接加入收藏夹。

发表评论

邮箱地址不会被公开。 必填项已用*标注