繁体   English   中英

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

[英]Javascript: Should an argument passed to a function be defined as 'let', 'const' or 'var'?

请考虑以下代码段:

// 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);

函数getDatatoken参数可以是null或字符串。

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

在调用者端量化token变量的正确方法是什么? 它应该是letconst还是var

它应该是var ,使用letconst将产生变量块作用域,并且只存在于if块中。 使用const也是你使用它的不必要的例外,并且将来不会改变它。

你的问题有点令人困惑。

你问有关“来电者”的一面,但正在调用的代码侧getData()函数明确定义token变量var已经正确的,在你的代码。 如果要在if语句之前定义let tokenif可以使用let来缩小范围以阻止范围。 您不能在代码中使用let代替var ,因为这只会在if块中定义变量,但您希望在该块之外使用它。

使用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()任何内容对函数参数在getData()工作方式完全没有影响。 所以,如果您的问题确实存在,那么getData()内部并不重要。 ES5和ES6中的函数参数总是可变的(如varlet ),并且这不是当前语言中可更改的内容。 它们是分配给您传递的值的单独变量,因此它们不会从您传递的内容继承任何const属性,并且它们的范围由新函数定义定义,因此它们的范围与传递的变量是否为const无关, letvar

因此,如果您将getData()函数声明为:

function getData(theToken) {

}

然后, theToken是一个可变参数,没有办法使它成为const 因为它基本上是在函数的顶层声明的,所以varlet之间确实没有区别所以它们之间并不重要,因为范围已经是整个函数并且它已经基本上被提升了。


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

function getData() {
    const [theToken] = arguments;

    // access theToken here as const

}

人们仍然可以通过直接访问arguments[0]覆盖它,但这肯定是有意的,而不是偶然的。

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

这就像varlet 由于它处于功能的最高范围并且已经悬挂,因此确实没有区别。 如果你在心理上想要选择一个,那就说它就像var一样,因为它总是功能范围。

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

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

getData(token, callback);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM