繁体   English   中英

javascript函数正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM