回答

收藏

var functionName = function() {} vs function functionName() {}

技术问答 技术问答 362 人阅读 | 0 人回复 | 2023-09-11

最近开始维护别人 JavaScript 代码。我正在修复错误,添加功能,并尝试整理代码,使其更加一致。$ j2 W7 \7 C: ~4 j# I5 b" o
以前的开发人员使用了两种声明函数的方法,我不知道背后是否有原因。
* o4 ^# l) w" a' l" Q这两种方法是:2 ]' H! C  A+ f- v/ q; _
    var functionOne = function(){     / / Some code};function functionTwo(){     / / Some code}) z( ]3 m  V- [0 U* c- ?
使用这两种不同方法的原因是什么,每种方法的优缺点是什么?有什么可以用一种方法完成,而另一种方法不能完成吗?7 B: M- r2 O! H0 g# q  l" o
                                                                3 f1 _9 a- ~4 C# T9 F9 ]
    解决方案:                                                                . t5 v% ~8 M# ]+ Z, H
                                                                区别在于它functionOne它是一种函数表达式,所以它只在到达银行时定义,functionTwo它是一个函数声明,并在其周围的函数或脚本执行后立即定义(因为hoisting)。  E3 I( ^- t/ |1 C8 _4 a( ~
例如,函数表达式:' Q' E8 L: g  R/ J
    // TypeError: functionOne is not a functionfunctionOne();var functionOne = function() {  console.log("Hello!");};
    . I! u+ N5 A# V9 F5 M1 ?
而且,函数声明:
: h8 d1 ?0 p4 x) U( x) \
    // Outputs: "Hello!"functionTwo();function functionTwo() {  console.log("Hello!");}
    7 A+ `. j% A0 g) d( d' N2 M- A
从历史上看,在浏览器之间处理块中定义的函数是不一致的。严格模式( ES5 中引入)通过将函数声明范围限定到它们的封闭块来解决这个问题。
2 `8 D) Q* ]. p2 j* ~
    'use strict note this block!  function functionThree()      console.log("Hello!");  }}functionThree(); // ReferenceError
    0 G: a. o. A4 N$ H7 R2 C0 `
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则