你的问题有点混乱。
您询问的是“调用者”方面,但调用getData() 函数的代码方面清楚地将token 变量定义为var 已经在您的代码中。如果您在 if 语句之前定义了 let token,您可以使用 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() 内部:
您如何定义(const、let 或 var)无论您传递给 getData(),都不会影响函数参数在 getData() 中的工作方式。所以,如果你的问题真的是关于这个的,那么在getData() 内部并不重要。 ES5 和 ES6 中的函数参数始终是可变的(如 var 或 let),这在语言中目前是不可更改的。它们是单独的变量,分配给您传递的值,因此它们不会从您传递的值继承任何 const 属性,并且它们的范围由新函数定义定义,因此它们的范围与传递的变量是否无关是const、let 或var。
所以,如果您将 getData() 函数声明为:
function getData(theToken) {
}
那么,theToken 是一个可变参数,没有办法使它成为 const。因为它本质上是在函数的顶层声明的,所以var 和let 之间真的没有区别,所以它们之间并不重要,因为范围已经是整个函数并且它已经基本上被提升了。
在 ES6 中,可能有一些有趣的解决方法,例如:
function getData() {
const [theToken] = arguments;
// access theToken here as const
}
仍然可以通过直接访问arguments[0] 来覆盖它,但这肯定是有意的,而不是偶然的。
在调用方量化令牌变量的正确方法是什么?应该是 let、const 还是 var?
类似于var 或let。由于它位于函数的顶级范围并且已经被提升,所以真的没有区别。如果你想选择一个,那么就说它就像var,因为它始终是函数范围的。