Всем привет. Разрешите задать нубский вопрос по CALL/APPLY, может кто-то разжуёт
Как следует из многих туториалов и учебников call отличается от apply тем, что в apply аргументом можно передать массив. А в call нет.
var object = {
"arr": ["Первый элемент",2,3,4,5],
"func": function() {
function awayFromMe(arr){
console.log(arr);
}
awayFromMe.call (this, this.arr);
awayFromMe.apply(this, this.arr);
}
};
object.func();
То-есть я рассчитывал что call ничего не даст, a apply отработает, но вопреки моим ожиданиям
call дал вывод массива:["Первый элемент", 2, 3, 4, 5]
apply дал вывод только первого элемента: "Первый элемент"
Почему так происходит?
Ответ
Путём проб и ошибок, мне кажется я уловил тонкий смысл различия между call/apply и хотел бы им с Вами поделиться, может ещё будет такой(-ая) же как я. Итак, допустим, у нас есть простая заданная функция, которая возвращает сумму двух чисел:
function sumTwoNumb(a, b){
return a + b;
}
Код крайне простой, мы передаём два аргумента в параметры функции, а она возвращает сумму. И допустим, нам надо вызвать эту функцию для двух элементов некоего массива.
Если мы вызовем её как: sumTwoNumb.call(null, [100,150]), то получится так, что первый параметр a получит аргументом весь массив [100,150], а второй параметр, b не получит ничего и станет, соответственно, undefined. И в итоге функция вернёт результат сложения [100,150]+undefined, а это равно 100,150undefined
А если мы её вызовем так: sumTwoNumb.apply(null, [100,150]), то при входе в функцию первый параметр a получит нулевой элемент массива = 100, а второй параметр получит первый элемент массива = 150 и в итоге функция вернёт результат сложения 100 + 150, то есть верный.
Уважаемые профессионалы, если я не прав, поправьте. Надеюсь, кому-то пригодится.
Комментариев нет:
Отправить комментарий