此函数如何在缺少参数的情况下工作

时间:2018-08-01 02:21:06

标签: javascript

当回调函数需要2个(选择器和数据)时,回调函数如何使用一个参数?为什么不抛出错误?

let links = document.querySelectorAll("a");
        links.forEach(function(link){
            link.addEventListener("click",function(e){
                e.preventDefault();
                ajax("get",e.target.href,render)
            })
        })
        function ajax(url,metodo,callback){
            let xhr = new XMLHttpRequest
            xhr.open(metodo,url)
            xhr.addEventListener("load",function(){
                if(xhr.status==200){
                    callback(xhr.response)
                }
            })
            xhr.send()
        }
        function render(selector,data){
            document.querySelector(selector).innerHTML = data
        }

1 个答案:

答案 0 :(得分:1)

在javascript中,无需使用函数定义中定义的相同数量的参数进行调用。如果我们未在函数定义中定义默认参数值,则参数将变为未定义类型。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters

  

默认功能参数允许初始化形式参数   如果未传递任何值或未定义,则使用默认值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions

  

从ECMAScript 2015开始,有两种新参数:   默认参数和其他参数。

     

默认参数:在JavaScript中,函数的参数默认为   未定义。但是,在某些情况下,设置   不同的默认值。这是默认参数可以提供帮助的地方。

     

过去,设置默认值的一般策略是测试   函数主体中的参数值,并在以下情况下分配值   他们是不确定的。在下面的示例中,如果没有提供任何值   对于呼叫中的b,在评估a * b时其值将不确定   并且乘法运算将返回NaN。但是,这是   在此示例中,第二行被捕获:

function multiply(a, b) {
  b = typeof b !== 'undefined' ?  b : 1;

  return a * b;
}

multiply(5); // 5
  

使用默认参数,不再需要在功能主体中进行检查。现在,您只需将1作为默认值   函数头中b的值:

function multiply(a, b = 1) {
  return a * b;
}

multiply(5); // 5

有关更多详细信息,请参见参考中的默认参数。

  

其余参数:其余参数的语法使我们可以表示一个   不确定数量的参数作为数组。在示例中,我们使用   rest参数以收集从第二个到最后的参数。   然后,我们将它们乘以第一个。

 function multiply(multiplier, ...theArgs) {
  return theArgs.map(x => multiplier * x);
}

var arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]

参数对象:

  

使用arguments对象,您可以调用更多功能   参数被正式声明为接受。这通常很有用   如果您事先不知道有多少参数将传递给   功能。您可以使用arguments.length来确定   参数实际传递给函数,然后访问每个   使用arguments对象的参数。

     

例如,考虑一个连接多个字符串的函数。   该函数的唯一形式参数是指定   分隔要连接的项目的字符。该功能是   定义如下:

 function myConcat(separator) {
   var result = ''; // initialize list
   var i;
   // iterate through arguments
   for (i = 1; i < arguments.length; i++) {
      result += arguments[i] + separator;
   }
   return result;
}
  

您可以向该函数传递任意数量的参数,   将每个参数连接到字符串“列表”中:

// returns "red, orange, blue, "
myConcat(', ', 'red', 'orange', 'blue');

// returns "elephant; giraffe; lion; cheetah; "
myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');

// returns "sage. basil. oregano. pepper. parsley. "
myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');

要使其抛出错误,如果未在函数中传递相同数量的参数,则可以使用typescript