javascript - javascript 函数应该有可选参数和选项吗?

标签 javascript function parameters meteor arguments

我一直在使用 Meteor 框架,我在文档中注意到一些函数被声明为 function(argument, [options]),这看起来不错。然而,其他的被声明为function([argument], [options])。如果参数是可选的,那不就意味着它是一个选项吗?

例如,Meteor.absoluteUrl在文档中定义如下:Meteor.absoluteUrl([path], [options])[path] 周围的括号表示不必传递它,并且将使用默认值。但是,在其下面的部分中:

Generate an absolute URL pointing to the application. The server reads from the ROOT_URL environment variable to determine where it is running. This is taken care of automatically for apps deployed with meteor deploy, but must be provided when using meteor bundle.

Arguments
path String
A path to append to the root URL. Do not include a leading "/".

Options
secure Boolean
Create an HTTPS URL.

replaceLocalhost Boolean
Replace localhost with 127.0.0.1. Useful for services that don't recognize localhost as a domain name.

rootUrl String
Override the default ROOT_URL from the server environment. For example: "http://foo.example.com"

本质上,有人可以解释一下形参、实参、选项和可选之间的区别吗?

最佳答案

参数与选项没有具体的定义。对我来说,当某项更常用或更接近功能目的时(即使它是可选的),我会在选项上做一些争论。当某些设置是可能影响结果的众多设置之一时,我会将其作为一个选项,但这些设置通常不会被使用,并且通常对于功能的目的来说不是那么重要(即使它们有一些效果)。

在您提供的示例中,[path] 参数对于函数的逻辑非常重要,它将显着提高代码的可读性,因为将其显示为参数并且它可能比选项更常用。

<小时/>

Javascript 中的可选参数在使用中也有一些限制。仅当可以(通过检查传递的参数的类型或值)了解调用者对参数的确切意图以及传递的哪个参数意味着函数的哪个参数时,才可以使用可选参数。

例如,您不能拥有一个接受两个可选参数且均为 bool 值或均为字符串的函数。如果只传递一个参数,那么您无法判断调用者打算传递两个可选参数中的哪一个。因此,有时您可能会选择一组明确的可选参数(通常具有不同类型),然后将其他所有内容放入选项对象中,其中每个选项都被命名,因此不会产生歧义。

关于javascript - javascript 函数应该有可选参数和选项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25097109/

相关文章:

c++ - 是否有统一的方式来存储和传递任何可调用对象?

R:(中缀)运算符的两个定义之间的冲突:如何指定包?

javascript - Jquery Datetime 带有不同日期时间格式的计时器

javascript - Phonegap 构建 XML 请求

javascript - 记住从表中随机选择

python - 如何在 Linux 终端上运行带有输入的 python 代码?

c++ - 将具有未知行和列大小的二维数组传递给函数 (C++)

xml - 使用参数值,如 xslt 中的 select

带有强制参数的 Powershell Cmdlet

javascript - polymer 变化自定义元素