命名函数声明有什么好处吗
Is there any advantage to naming function declarations?
A。函数foo(){}
B。var foo=函数foo(){}
我以A的方式编写所有的JavaScript函数,因为我认为B是多余的。我的同事喜欢进去做大量的查找/替换来像B一样重写我的函数,因为他说这是airbnb的最佳实践。
-
两者之间的根本/实际区别是什么?
-
他这样做有破坏我的密码的危险吗?
-
一种做法比另一种更好吗(你能引用任何来源吗)?
序言:Yours被称为函数声明。他的被称为命名函数表达式(NFE)。这些在本问题及其答案中进行了详细讨论,但针对您的具体问题:
据airbnb报道,他说这是最好的做法。。。
如果他在谈论这些Airbnb风格的指导方针,我看不出有什么支持这一说法的。我确实看到了一些你可以这样误读的东西,但这将是误读。它说不要在控制流块内声明功能,例如:
// bad
if (currentUser) {
function test() {
console.log('Nope.');
}
}
这是真的,这不仅不好,根据当前规范,它是无效的。只能在作用域的顶层声明函数(例如,在所有控制流结构(如if
、while
、for
等)之外的全局作用域;或者在所有控制流程结构之外的函数的顶层声明)。上面的例子是无效的,因为它在连接到if
的块内(在ES6中,仅针对web引擎,在非常特定的情况子集中可以容忍TL;DR:不要这样做。)
但这并不是一个笼统的"不要使用函数声明",不是远程的。
两者之间的根本/实际区别是什么?
您的表单在进入声明函数的范围时进行处理,在执行任何逐步代码之前(有时称为"提升")。当在代码的逐步执行中遇到函数表达式时,他的表单将在之后执行。
他这样做有破坏我的密码的危险吗?
是的,这个工作代码:
foo();
function foo() {
// ...
}
如果重写为:,则会中断
foo(); // <== Fails
var foo = function foo() {
// ...
}
因为函数声明提升已经消失(var
提升仍然存在),所以当您尝试调用foo
变量时,它的值为undefined
。
另外,一些浏览器错误地得到了NFE,创建了两个函数而不是一个。例如,IE8和旧版本的Safari一样。我所知道的所有现代浏览器都能正确使用。
最后,他正在重写您的代码,以依赖于"自动分号插入"这一恐怖功能(要正确地重写它,他需要在函数体后面添加;
)。ASI并不完美。依赖它传统上也会弄乱迷你人,尽管现在大多数迷你人都能正确处理它(因为从技术上讲,不处理它是迷你人中的一个错误)。
一种做法比另一种更好吗(你能引用任何来源吗)?
这是一个主观的意见问题,而不是上面提出的真正问题(由于拆除吊装和NFE而断裂)。
- 基于窗口宽度jquery的函数的替代方法是什么
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 了解在JavaScript中(在IE中)对某个事件调用了什么函数
- 编码技术叫什么?函数[]()
- 究竟是什么(函数()).().
- 全局在什么(函数(全局){一些代码.(这个)做
- 在HTML中使用JS的更好方法是什么?函数或选择器
- 这意味着什么(函数($){}
- TypeError:undefined不是函数--我不'我看不出什么函数是未定义的
- 对值不变的单元格调用什么函数
- SmoothState和Wordpress.在玩家和谷歌图表的回调时调用什么函数
- 如何知道事件发生时触发了什么函数(或代码片段)
- Node.JS我可以沙盒或限制什么函数可以访问
- 我可以在Javascript中使用什么函数来从一种字符编码转换为另一种
- 这两者的区别是什么?函数和原型
- ES6的语法是什么?函数调用后的冒号
- 它做什么?(函数(){..}());
- JavaScript的“对象”是什么?函数
- 手动调用PDFJS函数.在PDFView之后调用什么函数?打开渲染