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
),这在语言中是不可更改的。它们是分配值的独立变量