我一直习惯用这种方式编写函数原型声明:
var O = function () {};
O.prototype.fn = function () {}
但有些开发人员以这种方式写道:
var O = function () {};
O.prototype.fn = function fn () {}
这些方式是否相同?如果没有,使用第二种方式有什么好处?
var O = function () {};
O.prototype.fn = function fn () {}
答案 0 :(得分:4)
var a = function _a() { }
vs
var a = function () { }
前者称为命名函数表达式
后者只是一个功能分配。
NFE有两个优点
NFE有缺点。 Kangax talks about them in depth。
我个人在任何地方使用NFE并忽略IE所造成的内存泄漏。但是,由于IE将这些函数名称泄漏到全局范围,因此应该努力使它们成为唯一的。
因为IE习惯将这些名称泄露到全球范围内,所以我试着让它们与众不同。
这就是我在_
var doSomeLogic = function _doSomeLogic() {
};
作为旁注,还有另一种模式
var O = function () {};
O.prototype.fn = function fn () {}
var obj = new O();
哪个是
// prototype object
var O = {
fn: function _fn() { }
};
// factory
var o = function _o() { return Object.create(O); }
var obj = o();
答案 1 :(得分:0)
如果在创建匿名函数时使用名称,则可以在函数中使用该名称:
var x = function y() {
y(); // here it exists
}
y(); // here it doesn't exist
对此的使用当然是有限的。您可以将它用于递归,或者将该方法作为回调函数连接。