匿名函数和命名函数存在疑问
anonymous and named functions doubt
在调试时,我发现这类函数:
var f = function() {};
以anonymous
的形式出现在firebug或webkit开发控制台的堆栈跟踪中,这是理所当然的
我也看到人们将其定义为:
var someName = function otherName(){};
这很奇怪。请注意,这里不能从任何地方调用otherName()
,但是otherName
本身的主体。在其他任何地方,您都必须使用someName()
。
我的问题是:
命名一个不同于存储var的函数有什么问题吗?
除了在堆栈跟踪中显示名称之外,
var a = function a(){}
还有什么不同吗?关于这个主题的任何其他提示/建议:(
将名为f的函数分配给名为a的变量没有问题。
关于函数的一个很好的参考是https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope.特别感兴趣的是标题为"函数构造函数与函数声明与函数表达式"的部分,其中详细讨论了函数名称和函数分配给的变量之间的区别
我的猜测是调试器打印类似的东西的原因
var a = function a() {}
是在序列化函数值本身时显示函数的名称。调试器正在为您提供它所拥有的所有信息。
请注意,在这里,除了otherName本身的主体之外,您不能从任何地方调用otherName((。
不在IE中(包括IE8(。
请参阅http://kangax.github.com/nfe/#jscript-更多命名函数bug的bug,非常好的文章。
不是。使用var a = function b() {}
,命名函数不会被提升,其原型也不能进行有意义的修改。以以下代码为例:
function foo() {
}
foo.prototype.bar = "hi";
var a = new foo(); // this inherits from function foo() above
var b = function foo() {}; // this has nothing to do with the above
console.log(a.bar); // returns "hi" due to inheritance
console.log(b.bar); // returns undefined; its prototype is a new named
// function
var c = function() {};
var d = function d() {};
console.log(c.name); // returns ""
console.log(d.name); // returns "d"
AFAICT,主要有用的方法是使name
易于访问(主要用于var a = function a(){}
形式(,在某些边缘情况下可能会有帮助,我认为主要是在错误处理中。
- IE9的HTML5 Canvas getImageData()函数存在问题
- 如何添加函数中存在的所有参数
- 如何将一个函数附加到一个不存在的元素上
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 运行时不存在Javascript函数
- 如何使用函数来确定 Javascript 数组中是否存在值
- 在运行Javascript/jQuery中的函数之前,检查元素是否存在是否更具性能
- TypeError:$(..).higharts不是函数-现有解决方案不起作用-Yeoman生成器存在问题
- 检查D3.js中的函数中是否存在URL
- 在Require.js中,如果Require()是一个函数,那么Require.config()是如何存在的
- javascript className函数存在问题
- this.function不是函数错误,但函数存在
- jquery中的click函数存在问题
- 与变量值同名的函数存在,但是接收到typeError,为什么?
- create_row()函数存在问题
- JavaScript:重构对象中的方法和函数存在问题
- 为什么getUTCSeconds和getUTCMilliseconds函数存在?
- 匿名函数和命名函数存在疑问
- 未捕获的类型错误:不是函数,但函数存在
- 当有一个警报函数存在时,回调会被触发,如果没有警报,它不会被触发