var functionName = function() {} vs function functionName() {}
技术问答
363 人阅读
|
0 人回复
|
2023-09-11
|
最近开始维护别人 JavaScript 代码。我正在修复错误,添加功能,并尝试整理代码,使其更加一致。0 M* c2 N6 Q5 _, {, f
以前的开发人员使用了两种声明函数的方法,我不知道背后是否有原因。) e* r& I/ v) I
这两种方法是:
( f( d9 {. l7 J' kvar functionOne = function(){ / / Some code};function functionTwo(){ / / Some code}
2 J# f, N* V4 _$ ]% T ` 使用这两种不同方法的原因是什么,每种方法的优缺点是什么?有什么可以用一种方法完成,而另一种方法不能完成吗?3 d; O. G/ K5 z' h/ O; u0 ^
% G9 m+ u7 W8 h 解决方案:
1 C7 v5 p( i6 V& H, W8 j, C% {) _5 y 区别在于它functionOne它是一种函数表达式,所以它只在到达银行时定义,functionTwo它是一个函数声明,并在其周围的函数或脚本执行后立即定义(因为hoisting)。
# H9 V9 u/ y+ I例如,函数表达式:# w, S& a1 X- |" t
// TypeError: functionOne is not a functionfunctionOne();var functionOne = function() { console.log("Hello!");};4 |! E* {& R' ?4 ~( [6 u1 V' S/ v
而且,函数声明:
. V2 f0 ^2 @1 U" c. n// Outputs: "Hello!"functionTwo();function functionTwo() { console.log("Hello!");}
% d/ O, `# b1 y% `* G 从历史上看,在浏览器之间处理块中定义的函数是不一致的。严格模式( ES5 中引入)通过将函数声明范围限定到它们的封闭块来解决这个问题。; k& X' ?3 Q2 A& W
'use strict note this block! function functionThree() console.log("Hello!"); }}functionThree(); // ReferenceError9 r4 u( Q* M$ S" p4 w* u
|
|
|
|
|
|