Javascript node.js允许在函数调用中使用未定义的参数

Javascript node.js允许在函数调用中使用未定义的参数,javascript,ecmascript-6,Javascript,Ecmascript 6,假设我定义了一个函数: function pp(r) { console.log("In Function", r); console.log("In Function", q); console.log("In Function", m); } 如果我执行这个-我能够在函数中使用变量q,即使它没有定义为函数参数。然而,在那个地方,如果我放置另一个变量,它会抛出一个错误 pp('op', q='rr') In

假设我定义了一个函数:

function pp(r)
{
    console.log("In Function", r);
    console.log("In Function", q);
    console.log("In Function", m);
}
如果我执行这个-我能够在函数中使用变量q,即使它没有定义为函数参数。然而,在那个地方,如果我放置另一个变量,它会抛出一个错误

pp('op', q='rr')
In Function op
In Function rr
Uncaught ReferenceError: m is not defined
现在,如果我删除行
console.log(“In Function”,q)
我仍然得到错误
未捕获引用错误:m未定义
,这是可以接受的,因为q是一个命名变量

如何使用传递给函数参数中未定义的函数的变量?

pp('op',q='rr')
-这不是正确的方法。它将创建一个值为“rr”的全局变量“q”。这就是你得到q值的原因

一种方法是

function pp(r, q='rr', m)
{
    console.log("In Function", r);
    console.log("In Function", q);
    console.log("In Function", m);
}

pp('op') //  r -> op , q -> rr and m is undefined
[或]使用参数

 function pp()
    {

      if(arguments.length > 0) {
        console.log("In Function", arguments[0]);//op1
        console.log("In Function", arguments[1]);//undefined
        console.log("In Function", arguments[2]);//undefined
    }
  }
    
    pp('op1')
pp('op',q='rr')
-这不是正确的方法。它将创建一个值为“rr”的全局变量“q”。这就是你得到q值的原因

一种方法是

function pp(r, q='rr', m)
{
    console.log("In Function", r);
    console.log("In Function", q);
    console.log("In Function", m);
}

pp('op') //  r -> op , q -> rr and m is undefined
[或]使用参数

 function pp()
    {

      if(arguments.length > 0) {
        console.log("In Function", arguments[0]);//op1
        console.log("In Function", arguments[1]);//undefined
        console.log("In Function", arguments[2]);//undefined
    }
  }
    
    pp('op1')

您可以使用
Javascript Rest参数
ES6
提供了一种称为
Rest parameter
的新参数,其前缀为
三点(…)

让我们看看如何使用它:

function pp(r, ...args) { // ...args contains all rest parameters
  console.log("In Function", r); // op
  console.log("All other passed values", args)   // [rr, tt]
  console.log(args[0]) // 0th index value => rr
  console.log(args[1]) // 1st index value => tt
}

pp('op', 'rr', 'tt');

您可以使用
Javascript Rest参数
ES6
提供了一种称为
Rest parameter
的新参数,其前缀为
三点(…)

让我们看看如何使用它:

function pp(r, ...args) { // ...args contains all rest parameters
  console.log("In Function", r); // op
  console.log("All other passed values", args)   // [rr, tt]
  console.log(args[0]) // 0th index value => rr
  console.log(args[1]) // 1st index value => tt
}

pp('op', 'rr', 'tt');

q是一个命名变量
-不,它不是。。。只有r是。。。您的
q='rr'
正在创建一个名为
q
的全局变量-这就是它工作的原因。如果您在函数中检查了'arguments',请键入“!(typeof arguments=='object'&&typeof arguments.length=='number'&&arguments.length>0)”将其放入if条件,并返回if,因为没有传递有效参数!如果通过,则根据长度计数将变量分配给[0]、[1]、[2]。始终使用严格模式。(ES模块是自动严格模式。)
q是一个命名变量
-不,它不是。。。只有r是。。。您的
q='rr'
正在创建一个名为
q
的全局变量-这就是它工作的原因。如果您在函数中检查了'arguments',请键入“!(typeof arguments=='object'&&typeof arguments.length=='number'&&arguments.length>0)”将其放入if条件,并返回if,因为没有传递有效参数!如果通过,则根据长度计数将变量分配给[0]、[1]、[2]。始终使用严格模式。(ES模块自动处于严格模式。)