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