[英]javascript function does work properly
我是javascript世界的新手,正在尝试构建一个可以与回调函数一起使用的简单函数。 这是代码:
function add(a,b,c, callback) {
var arr = [];
if(callback != 'function') {
for (var i = 0; i<arguments.length;i++) {
arr[i] = arguments[i]*2;
}
}
else {
for (var i = 0; i<arguments.length-1;i++) {
arr[i] = callback(arguments[i]*2);
}
}
return arr;
}
function add1 (something) {
return something + 1;
我想将此代码作为add(1、3、4)或add(1、3、4,add1)运行。 但是回调函数不起作用。 每当它进入if语句时。 有人可以告诉我为什么add(1,3,4,add1)无法正常工作吗?
参数callback
唯一等于字符串function
是,如果您将参数'function'
string 'function'
作为参数4传递给...,那当然会导致else代码失败,因为'function'
不是函数
因此,在您的情况下,条件始终为true,因为您传递了一个函数,而不是字符串“ function”作为第四个参数
因此,在add(1,3,4,add1)
的情况下,您的代码将返回
[2, 6, 8, NaN]
楠是试图乘以2的函数的结果-其是N催产素A N棕土
通过将if
条件更改为
if (typeof callback != 'function')
您将得到想要的机器人
function add(a, b, c, callback) { var arr = []; if (typeof callback != 'function') { for (var i = 0; i < arguments.length; i++) { arr[i] = arguments[i] * 2; } } else { for (var i = 0; i < arguments.length - 1; i++) { arr[i] = callback(arguments[i] * 2); } } return arr; } function add1(something) { return something + 1; } console.log(add(1, 3, 4)); console.log(add(1, 3, 4, add1));
if(typeof callback != 'function')
如上更改您的if语句。 由于您只放置了callback!='function' ,因此JavaScript将找到名为'callback'的变量或对象属性,并尝试将其值与字符串值'function'进行比较。
当您调用没有回调参数的add(1,3,4)时,if语句当然会返回false,因为参数回调默认情况下为'undefined'。 但是,如果要传递回调函数作为参数怎么办? 像add(1,3,4,add1)
// The arguments when you call add(1,3,4,add1)
▼Arguments(4)
0: 1
1: 3
2: 4
3: f add1(something)
寒冷会给您带来错误的数据:
// When i equals 3, arguments[3] * 2 will not work properly, since it's not a number type
if(callback != 'function'){
for(var i = 0; i < arguments.length; i++){
arr[i] = arguments[i] * 2;
}
}
即使您认为已将add1函数作为参数传递,但是if语句仅将'callback'的值与字符串值'function'进行比较,则它无法按您的想法工作。 因此,为了正确起见,您必须使用'typeof'让JavaScript知道callback的类型是否是函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.