簡體   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