Javascript:传递给函数的参数是否应定义为';让'';常数';或';var';?
考虑以下代码段:Javascript:传递给函数的参数是否应定义为';让'';常数';或';var';?,javascript,node.js,constants,var,let,Javascript,Node.js,Constants,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); 函数getData的token参数可以是
// 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或字符串
调用方端的代码块定义变量令牌并将其设置为正确的值
在调用者端量化
令牌
变量的正确方法是什么?它应该是let
,const
或var
?它应该是var
,使用let
和const
将使变量块作用域成为if
块中的变量。使用const
也是不必要的例外,您将使用它,并且将来不会更改它。它应该是var
,使用let
和const
将使变量块成为作用域,并且只存在于if
块中。使用const
也是不必要的例外,你会使用它,将来也不会更改它。你的问题有点让人困惑
您询问的是“调用者”端,但是调用getData()
函数的代码端清楚地将令牌
变量定义为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);
// Set 'token' to have string value or null
let token = null;
if ("nextForwardToken" in event.queryStringParameters) {
token = event.queryStringParameters.nextForwardToken;
}
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) {
}
然后,token
是一个可变参数,无法使其成为const
。因为它本质上是在函数的顶层声明的,所以var
和let
之间实际上没有区别,所以它们之间其实并不重要,因为范围已经是整个函数,并且已经基本上被提升了
在ES6中,有一些有趣的工作,例如:
function getData() {
const [theToken] = arguments;
// access theToken here as const
}
我们仍然可以通过直接访问参数[0]
来覆盖它,但这肯定是有意的,而不是偶然的
在调用端量化令牌变量的正确方法是什么?它应该是let,const还是var
它就像var
或let
。由于它处于功能的最高范围,并且已经吊装,所以实际上没有什么区别。如果你心里想选一个,那就说它像var
,因为它总是函数作用域。你的问题有点让人困惑
您询问的是“调用者”端,但是调用getData()
函数的代码端清楚地将令牌
变量定义为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);
// Set 'token' to have string value or null
let token = null;
if ("nextForwardToken" in event.queryStringParameters) {
token = event.queryStringParameters.nextForwardToken;
}
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
),这在语言中是不可更改的。它们是分配值的独立变量