当回调函数需要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
}
答案 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。