在 Javascript 中声明函数最有效的方法是什么?

2024-04-16

我一直了解到,要在 javascript 中声明函数,您应该执行以下操作:

function myfunction(fruit){
    alert('I like ' + fruit + '!');
}

或类似的东西:

var myfunction = function(fruit){
    alert('I like ' + fruit + '!');
};

然而,最近,我注意到有些人实际上将函数定义为常量:

const myfunction = fruit=> alert('I like ' + fruit + '!');

或者甚至使用关键字let:

let myfunction = fruit=> alert('I like ' + fruit + '!');

此时我很困惑。

  • 为什么定义函数有这么多方法?
  • 我应该在何时/何地使用每一种?
  • 哪种方式更有效率?

我认为这取决于您的需求。例如

这将定义你的函数myfunction您本地范围内的名称

function myfunction(fruit){
    alert('I like ' + fruit + '!');
}

另一方面,下面的代码将定义一个variable called myfunction它指向本地范围内的匿名函数。

var myfunction = function(fruit){
    alert('I like ' + fruit + '!');
};

而下面的代码将定义一个ECMA6的箭头函数 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions目前并非所有浏览器都支持。除了,let语句声明一个块作用域局部变量,可以选择将其初始化为一个值。所以你的myfunction代码块关闭后将看不到变量。

let myfunction = fruit=> alert('I like ' + fruit + '!');

let允许您声明范围仅限于使用它的块、语句或表达式的变量。您可以阅读更多内容并查看一些例子在这里 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

正如官方文档所说:

const 声明创建对值的只读引用。它 并不意味着它所持有的值是不可变的,只是变量 标识符不能被重新分配。

const myfunction = fruit=> alert('I like ' + fruit + '!');

所以如果你尝试重新分配myfunction它会失败(无提示)(但在 Safari 中不会失败)

// this will fail silently in Firefox and Chrome 
myfunction = fruit=> alert('No! I DO NOT like ' + fruit + '!');

About let and constMDN 参考文献说的相似之处

常量是块作用域的,很像使用 let 定义的变量 陈述。常量的值不能通过以下方式改变 重新分配,并且不能重新声明。

So, as 奥雷利奥·德·罗莎 说 http://www.sitepoint.com/preparing-ecmascript-6-let-const/,

常量与使用 let 声明的变量共享一个功能 它们是块作用域而不是函数作用域

阅读更多关于const here https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/const

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript 中声明函数最有效的方法是什么? 的相关文章

随机推荐

  • WPF:列表视图在顶部而不是底部显示最近添加的项目

    我有一个集合绑定到列表视图 该集合每 4 5 秒添加一次项目 新项目将自动添加到列表视图的底部 因此 如果您想看到最新的项目 那么您需要向下滚动到底部 我的问题是 是否可以反转列表视图 以便新的最新项目位于顶部 最旧的项目位于底部 Than
  • 视频馈送至 ThingsBoard 仪表板

    我目前使用 ThingsBoard 作为 IoT 代理来捕获来自多个传感器的遥测数据并将其显示到仪表板 我想添加显示来自 iPhone 相机或网络摄像头的实时视频源的功能 我想知道这里是否有人知道 ThingsBoard 是否支持任何类型的
  • 检测PHP中是否启用cookie

    我正在尝试检测我的页面上的用户是否启用了 cookie 以下代码执行检查 但是 我不知道如何将用户重定向到他们来自的页面 该脚本启动一个会话并检查是否已检查 cookie 如果没有 它会将用户重定向到测试页面 并且由于我在第一页中调用了 s
  • R rpart:如果删除不太重要的变量,则不会分割

    我试图了解 rpart 在我试图完成的项目中如何工作 我对 R 比较陌生 但我有很多使用 SAS 构建各种分析模型的经验 首先我运行了这段代码 mtree1 lt rpart X17 data mydata method class con
  • FileInfo.Extension 是否返回最后一个 *.* 模式或其他内容?

    我很好奇以下行为到底是什么 FileInfo info new FileInfo C testfile txt gz string ext info Extension 这会返回 txt gz 还是 gz 更多扩展名 例如 txt gz z
  • 点击 CardView 时的仰角动画

    我想将海拔动画添加到我的android support v7 widget CardView 就像材质风格一样Button是的 我尝试过设置一个StateListAnimator android stateListAnimator anim
  • 如何在 FactoryGirlRails 中定义序列?

    以前在 Factory Girl 中 我们可以像这样定义序列 spec factories rb FactoryGirl define do this is the sequence in question sequence random
  • vscode api:如何从文件图标主题获取图标

    我正在为 VSCode 编写一个扩展 在 WebviewPanel 中 我需要显示来自文件图标主题的文件扩展名图标 有没有从文件图标主题中获取图标的功能 我也在研究这个 我还没有答案 但到目前为止已经有了一些线索 希望这可以帮助 https
  • Perl 调用带括号和不带括号的方法

    一些 Perl 书籍建议在调用类方法时使用括号 称这有助于使解析器不必猜测代码的意图 然而 我见过的几乎所有 Perl 代码 包括 cpan 上的模块 在调用不带参数的方法时很少使用括号 省略这些括号是正常的还是我应该总是输入它们 我编写了
  • Keras:使用 flow_from _directory() 函数为两个输入模型创建自定义生成器

    我试图用以下方法训练我的暹罗网络fit generator 我从这个答案中了解到 Keras 如何将 fit generator 与多个输入一起使用 https stackoverflow com questions 49404993 ke
  • 通过实施 Web 服务向 Alexa 托管自定义技能

    我正在开发一个网络服务 用于处理 Alexa 发送的请求并在 net 框架中以特定响应进行响应 Alexa 以 JSON 格式发送到您的服务的请求正文 如下所示 version string session new true session
  • 使用AppService的连接持续时间有限制吗?

    我有一个 UWP 应用程序托管应用服务 https learn microsoft com en us windows uwp launch resume how to create and consume an app service在同
  • Pyspark 错误:Java 网关进程在发送其端口号之前退出

    我正在使用 Pyspark 在 Jupyter Notebook 中运行一些命令 但它抛出错误 我尝试了此链接中提供的解决方案 Pyspark 异常 Java 网关进程在向驱动程序发送其端口号之前退出 https stackoverflow
  • /usr/bin/ld: 找不到 -llibeststring.a

    我在我的程序中使用 Festival TTS C API 我已经从以下位置下载了所有文件http www cstr ed ac uk downloads festival 2 0 95 http www cstr ed ac uk down
  • Python urllib2.urlopen() 很慢,需要更好的方法来读取多个 url

    正如标题所示 我正在开发一个用 python 编写的网站 它多次调用 urllib2 模块来读取网站 然后我用 BeautifulSoup 解析它们 由于我必须阅读 5 10 个网站 因此页面需要一段时间才能加载 我只是想知道是否有办法一次
  • 在 iOS 5 中播放视频

    我正在尝试遵循本教程link http www techotopia com index php Video Playback from within an iOS 5 iPhone Application 但我有问题 有人可以看一下并让我
  • oracle pl/sql中的XML解析

    我正在尝试在 PL SQL 中解析此 XML
  • 在 WHERE 中使用 ROW_NUMBER() 别名[重复]

    这个问题在这里已经有答案了 在 Postgresql 9 1 中 我尝试使用 ROW NUMBER 别名字段过滤 WHERE 子句中的结果集 这个查询工作正常 SELECT inv client pk inv invoice pk inv
  • 监听来自UIWebView的所有请求

    我可以使用以下方法拦截来自 UIWebView 的初始加载请求 BOOL webView UIWebView webView shouldStartLoadWithRequest NSURLRequest request navigatio
  • 在 Javascript 中声明函数最有效的方法是什么?

    我一直了解到 要在 javascript 中声明函数 您应该执行以下操作 function myfunction fruit alert I like fruit 或类似的东西 var myfunction function fruit a