Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中匿名函数和传统函数的内存使用情况有什么不同吗?如果是,怎么做?_Javascript_Closures_Anonymous Function - Fatal编程技术网

Javascript中匿名函数和传统函数的内存使用情况有什么不同吗?如果是,怎么做?

Javascript中匿名函数和传统函数的内存使用情况有什么不同吗?如果是,怎么做?,javascript,closures,anonymous-function,Javascript,Closures,Anonymous Function,Javascript中的匿名函数和普通函数之间是否存在内存使用差异 如果是,怎么做?你能解释一下吗?如果“普通函数”是指脚本根级别声明为函数a(){的函数,即附加到窗口对象的函数,那么是的,有区别: 附加到窗口对象的函数不会被丢弃,而一旦不再使用匿名函数,它们就会被丢弃 它们可能会降低对窗口对象其他变量的访问速度(在根级别附加函数有时是有条件的,但避免它的原因主要是为了有更干净的代码和避免名称冲突) 匿名函数是:它们保留一个指向其封闭作用域的指针,从而允许使用在此作用域中定义的变量。一个副作用

Javascript中的匿名函数和普通函数之间是否存在内存使用差异

如果是,怎么做?你能解释一下吗?

如果“普通函数”是指脚本根级别声明为
函数a(){
的函数,即附加到窗口对象的函数,那么是的,有区别:

  • 附加到窗口对象的函数不会被丢弃,而一旦不再使用匿名函数,它们就会被丢弃
  • 它们可能会降低对窗口对象其他变量的访问速度(在根级别附加函数有时是有条件的,但避免它的原因主要是为了有更干净的代码和避免名称冲突)
  • 匿名函数是:它们保留一个指向其封闭作用域的指针,从而允许使用在此作用域中定义的变量。一个副作用是,此作用域不能在函数之前被丢弃,因此函数可能比您想象的要重,比“普通函数”要重(如果不需要匿名声明的变量,您可以添加一个空的作用域来封装匿名声明,并防止出现这种效果,但我不知道javascript引擎是否能够优化掉封闭作用域的一部分,我建议您在不检测循环引用的情况下不要这样做)
但是这些差别通常很小,你通常不需要注意。在你的大多数页面中,你的匿名函数不会被破坏,因为你没有删除事件处理程序(通常是匿名函数的第一个根本原因)

整体而言(过早优化是根本原因等),我建议你喜欢可读性,只要你没有垃圾问题。Javascript引擎和它们的GC变化很大,所以你的努力可能是无用的


谷歌有。

如果你指的是匿名函数与命名函数,那么我认为推荐一个函数与推荐另一个函数在性能上没有什么区别。你可以尝试做一个简单的jsPerf测试,不要试图使你的答案无效,但是引用你的语句会更好:)(spec/test)我添加了一个。如果它们出现在我的记忆中,我会添加其他的。在第一点中,我理解,匿名函数可以在我们不使用它们时被丢弃。但在第三点中,你是说匿名函数不能在它们之前被丢弃……你能更详细地解释一下吗?我详细了一点,试图更清楚。但我建议你遵循li我在最后给出的nks是为了对这个话题有一个完美的看法。