如果我定义多个参数但只传入一个参数会发生什么?

时间:2016-09-26 01:59:53

标签: javascript

该功能定义如下,但如果我只传入一个参数并忽略该命令,我就不知道该功能如何工作。

function setCookie(name,value,path,expires){

    value = escape(value);
    if(!expires){
        var now = new Date();
        now.setMonth(now.getMonth() + 6);
        expires = now.toUTCString();
    }
    if(path){
        path = ";path = " + path;
        }

    document.cookie = name + "=" + value + ";expires = " + expires + path;
    }

4 个答案:

答案 0 :(得分:3)

其余的将是undefined

在询问之前尝试自己尝试是件好事。您可以编写一个测试程序并在可能与编写问题所用的时间相同的情况下对其进行测试。

答案 1 :(得分:1)

忽略JS函数的参数会隐式地将它们设置为undefined。额外参数将被忽略。

这通常用于提供默认参数(在ES6之前),如下所示:



function foo(bar) {
  if (bar === undefined) bar = "default";
  console.log(bar);
}

foo("test"); // logs "test"
foo();       // logs "default"




答案 2 :(得分:1)

它将在大多数情况下起作用,但您需要确保定义了您使用的每个变量。在该行中,function setCookie(name,value,path,expires){namevaluepathexpires都在那里定义。它与var name =...几乎相同,设置为你传入的任何内容。但如果你没有传入任何内容,它会遗漏定义name的部分或其他变量,那些变量= undefined。如果变量等于undefined,则不能在document.cookie = name + "=" + value + ";expires = " + expires + path;之类的行中使用它。您需要做的是确保每个都存在,如果不存在,则将其定义为空白字符串。

答案 3 :(得分:0)

当涉及到参数时,JavaScript有非常宽松的规则。你可以输入函数没有列出的无限参数(尽管它们必须通过内置的arguments变量访问)。



function showArguments() {
  for(var index = 0; arguments.length >= index; index++) {
    var argument = arguments[index];
    var p = document.createElement('p');
    p.textContent = argument;
    document.body.appendChild(p)
  }
}
showArguments('foo', 'test')




您可以运行一个函数,要求10个参数为0,并且只有当您尝试访问不存在的属性时才会出错。



function foo(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {
  console.log('no error, until you try to access something like length on the undefined argument');
  var length = arg1.length;
}
foo();




但由于这种松散,当您尝试访问 应该 的参数时,会返回undefined。因此,除了在未定义上运行escape的第一个可能错误旁边,应该没有错误,document.cookie将等于name + '=' + undefined + ';expires = ' + now.toUTCString() + undefined



function setCookie(name,value,path,expires){

  value = escape(value);
  if(!expires){
    var now = new Date();
    now.setMonth(now.getMonth() + 6);
    expires = now.toUTCString();
  }
  if(path){
    path = ";path = " + path;
  }

  var cookie = name + "=" + value + ";expires = " + expires + path;
  var div = document.createElement('div');
  var p = document.createElement('p');
  var p2 = document.createElement('p');
  p.textContent = 'name + "=" + value + ";expires = " + expires + path: ' + cookie;
  p2.textContent = 'name + "=" + undefined + ";expires = " + now.toUTCString() + undefined: ' + name + "=" + undefined + ";expires = " + now.toUTCString() + undefined;
  div.appendChild(p);
  div.appendChild(p2);
  document.body.appendChild(div);
  return cookie
}

setCookie('foo');




要为这些未定义的变量设置默认值,请添加var foo = foo || 'default'