gpt4 book ai didi

javascript - 函数表达式有什么意义,它们似乎没用

转载 作者:行者123 更新时间:2023-12-05 05:04:02 25 4
gpt4 key购买 nike

如果这是重复的,我很抱歉,我已经阅读了一些问这个问题的帖子,但我没有找到令人满意的答案。我是 JS 的新手,我使用过 C 和 Java。我最近了解了函数表达式,据我所知,它是分配给某个 const 变量的匿名函数声明。我不明白这背后的动机是什么/它的可能用途是什么/这怎么能做一些你不能只用函数声明做的事情。例如

const example = function (input){
return 'Am I useless?:' + input;
}

console.log(example('Idk'));

这就像用相同的变量调用声明的函数,但我使用的是这个变量名(example),这也使匿名函数看起来是伪匿名的,因为它确实有一个可以引用的名称。

我看不出什么时候这比函数声明更可取,但我正在参加的 CodeCademy 类(class)反复使用了函数表达式,所以我一定遗漏了一些东西。

非常感谢您的帮助/说明。

最佳答案

TL;DR:不,函数表达式并非无用。


首先,我会从函数表达式中推导出函数声明,而不是相反。函数声明也很有用,但它们可以完全由函数表达式代替。

主要区别:函数声明总是创建变量,而函数表达式则不会。但是,您仍然可以将它们分配给变量。

以下代码是相同的(好吧,不完全相同,它们的提升规则不同):

function foo(bar){
return 'baz'
}
//Function declarations create variables like how `var` does
var foo = function foo(bar){
return 'baz'
}

但是,当您不想将函数存储到 var⁠iable 中时,函数表达式会变得很方便。

示例包括:

  • 常量函数:

    const foo = function foo(bar){
    return 'baz'
    }
  • block 作用域函数:

    {
    let foo = function foo(bar){
    return 'baz'
    }
    }
  • IIFE(立即调用的函数表达式):

    (function (bar){
    //Here we have an encapsulated local scope and the ability to return things
    return 'baz'
    })('foo')
  • 回调:

    asyncFn(function (){
    console.log('Done!')
    })
  • 存储在对象中:

    foo[2].bar = function (){
    return 'baz'
    }
  • 分配给先前声明的变量:

    let foo = null
    console.log(foo)
    foo = function foo(bar){
    return 'baz'
    }

而且,尽管从技术上讲,上述所有问题都可以仅通过使用函数声明来解决,但这会导致大量不必要的变量和难以阅读的代码。


我不完全知道为什么代码学院更喜欢在您的案例中使用函数表达式,但我认为关键在于 const 关键字,因为它是:

  • block 范围
  • 不变
  • 限制 var(和函数声明)允许的奇怪怪癖
  • 带有临时死区的悬挂(在声明之前无法访问)

关于javascript - 函数表达式有什么意义,它们似乎没用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61298727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com