Javascript:传递给函数的参数是应该定义为'let','const'还是'var'?

时间:2017-07-12 05:45:00

标签: javascript node.js const var let

请考虑以下代码段:

// Set 'token' to have string value or null

if ("nextForwardToken" in event.queryStringParameters) {
  var token = event.queryStringParameters.nextForwardToken;
} else {
  var token = null;
}

getData(token, callback);

函数token的{​​{1}}参数可以为null或字符串。

调用者端的代码块定义变量令牌并将其设置为正确的值。

在调用者方面量化getData变量的正确方法是什么?它应该是tokenlet还是const

3 个答案:

答案 0 :(得分:1)

应为var,使用letconst将生成变量块范围,并且仅存在于if块中。使用const也可以使用它,并且不会在将来更改它。

答案 1 :(得分:1)

你的问题有点令人困惑。

你在询问&#34;来电者&#34;方,但调用getData()函数的代码的一侧清楚地将token变量定义为var已经在您的代码中。如果您希望在let语句之前定义let token来缩小范围以阻止范围,则可以使用if。您不能在代码中使用let代替var,因为这只会在if块中定义变量,但您希望在该块之外使用它。< / p>

使用let:

所以,您可以像这样使用let

let token;
if ("nextForwardToken" in event.queryStringParameters) {
  token = event.queryStringParameters.nextForwardToken;
} else {
  token = null;
}
getData(token, callback);

如果这不是顶级函数范围,那么使用let会将范围缩小到只有父块。

使用const:

您无法将此结构与const结合使用,因为const只能定义一次并且必须包含初始值设定项。因此,如果您想使用const,那么您可以这样做:

const token = "nextForwardToken" in event.queryStringParameters ? event.queryStringParameters.nextForwardToken : null;
getData(token, callback);

当然,你甚至可以在没有临时变量的情况下这样做:

getData("nextForwardToken" in event.queryStringParameters ? event.queryStringParameters.nextForwardToken : null, callback);

getData()内部:

如何定义(constletvar)您传递给getData()的任何内容对函数参数如何在{{1}内工作完全没有影响}}。所以,如果你的问题确实存在,那么getData()内部并不重要。 ES5和ES6中的函数参数总是可变的(如getData()var),并且这不是当前语言中可更改的内容。它们是分配给您传递的值的单独变量,因此它们不会继承您传递的任何let属性,并且它们的范围由新函数定义定义,因此它们的范围与之无关。传递的变量是constconst还是let

因此,如果您将var函数声明为:

getData()

然后,function getData(theToken) { } 是一个可变参数,没有办法让它成为theToken。由于它基本上是在函数的顶层声明,因此constvar之间确实没有区别,所以它们之间并不重要,因为范围已经是整个函数它已经基本悬挂起来了。

在ES6中,有一些有趣的解决方法,例如:

let

可以通过直接访问function getData() { const [theToken] = arguments; // access theToken here as const } 来覆盖它,但这肯定是故意的,而不是偶然的。

  

在调用者方面量化令牌变量的正确方法是什么?它应该是let,const还是var?

它可能是arguments[0]var。由于它处于功能的最高范围并且已经悬挂,因此确实没有区别。如果你在精神上想要选择一个,那就说它像let,因为它总是功能范围。

答案 2 :(得分:1)

为什么你不像这样编写代码:

// Set 'token' to have string value or null
let token = null;
if ("nextForwardToken" in event.queryStringParameters) {
  token = event.queryStringParameters.nextForwardToken;
}

getData(token, callback);