我一直在使用 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/