大多数动态类型编程语言不要在参数列表中有显式变量。 var关键字的目的是与“我设置一个现有的变量”,并在
var x = 17; //new variable
x = 18; //old variable
(只有极少数的语言“我创建一个新的变量”,像Python,用var完全消失分化但也有一些问题,例如,封锁和意外错别字等等变种仍然十分普遍)
但在参数列表你不能分配到现有变量所以以前的模糊性并不需要解决的问题。因此,参数列表中的var声明只不过是多余的样板。 (和冗余的样板是坏的 - 看到COBOL在exibit A)
你可能正从C或Java,但在他们的情况类型声明你的想法一倍,作为变量声明,并在参数列表的克鲁夫特是声明的类型和而不是。
我们甚至可以在某些类型的语言中摆脱“无类型,无变化”的参数列表。例如,在Haskell中,可以推断类型,因此不需要将它们写在参数列表中。正因为如此的参数列表只包含变量名,并在JavaScript的情况下,我们并不需要把多余的“让”(Haskell的相当于“变种”到)在那里:
f a b = --arguments are still variables,
-- but we don't need "let" or type definitions
let n = a + b in --extra variables still need to be declared with "let"
n + 17
为什么你想关键字那里? 'var'声明变量,参数(有点)不同。这里没有关键字,它没有增加任何价值。 – 2011-11-29 12:14:02
这不是一个足够好的理由吗? var会给你什么额外的信息?此外,每次声明一个函数var时,您都可以保存4个字符,为了清晰起见,您可以使用变量名称。 – Asken
由于ECMA-262表示形式参数(如声明的变量)在执行任何代码之前都会创建局部变量对象的命名属性。所以一个正式的参数或多或少是默认声明的。 – RobG