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);
函数 getData
的 token
参数可以为 null 或字符串。
调用方的代码块定义了变量token并将其设置为正确的值。
在调用方量化 token
变量的正确方法是什么?应该是 let
、const
还是 var
?
应该是var
,使用let
和const
会使变量块作用域,只存在于if
块中。使用 const
也是不必要的,除非您会使用它并且将来不会更改它。
你的问题有点混乱。
你问的是"caller"这边,但是调用getData()
函数的代码那一边明确定义了token
变量为var
已经对了在你的代码中。如果您在 if
语句之前定义了 let token
,那么如果您想将范围缩小到块范围,则可以使用 let
。您不能在代码中使用 let
代替 var
,因为那样只会在 if
块内定义变量,但您想在该块外使用它。
使用让:
因此,您可以像这样使用 let
:
let token;
if ("nextForwardToken" in event.queryStringParameters) {
token = event.queryStringParameters.nextForwardToken;
} else {
token = null;
}
getData(token, callback);
如果这还没有在顶层函数范围内,那么使用 let
会将范围缩小到父块。
使用常量:
您不能真正将此结构与 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]
来覆盖它,但这肯定是有意的,而不是偶然的。
What's the right way to quantify the token variable on the caller side? Should it be let, const or var?
就像 var
或 let
。因为它在函数的顶部范围并且已经被提升,所以真的没有区别。如果你在心理上想选择一个,那就说它像 var
因为它总是函数范围。
为什么你不这样简单地编写代码:
// Set 'token' to have string value or null
let token = null;
if ("nextForwardToken" in event.queryStringParameters) {
token = event.queryStringParameters.nextForwardToken;
}
getData(token, callback);
考虑以下代码片段:
// 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);
函数 getData
的 token
参数可以为 null 或字符串。
调用方的代码块定义了变量token并将其设置为正确的值。
在调用方量化 token
变量的正确方法是什么?应该是 let
、const
还是 var
?
应该是var
,使用let
和const
会使变量块作用域,只存在于if
块中。使用 const
也是不必要的,除非您会使用它并且将来不会更改它。
你的问题有点混乱。
你问的是"caller"这边,但是调用getData()
函数的代码那一边明确定义了token
变量为var
已经对了在你的代码中。如果您在 if
语句之前定义了 let token
,那么如果您想将范围缩小到块范围,则可以使用 let
。您不能在代码中使用 let
代替 var
,因为那样只会在 if
块内定义变量,但您想在该块外使用它。
使用让:
因此,您可以像这样使用 let
:
let token;
if ("nextForwardToken" in event.queryStringParameters) {
token = event.queryStringParameters.nextForwardToken;
} else {
token = null;
}
getData(token, callback);
如果这还没有在顶层函数范围内,那么使用 let
会将范围缩小到父块。
使用常量:
您不能真正将此结构与 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]
来覆盖它,但这肯定是有意的,而不是偶然的。
What's the right way to quantify the token variable on the caller side? Should it be let, const or var?
就像 var
或 let
。因为它在函数的顶部范围并且已经被提升,所以真的没有区别。如果你在心理上想选择一个,那就说它像 var
因为它总是函数范围。
为什么你不这样简单地编写代码:
// Set 'token' to have string value or null
let token = null;
if ("nextForwardToken" in event.queryStringParameters) {
token = event.queryStringParameters.nextForwardToken;
}
getData(token, callback);