Думаєте, знаєте JavaScript? Ці прості на вигляд питання можуть вас здивувати!

Ось п’ять, на перший погляд, простих запитань з JavaScript, пов'язаних із параметрами та аргументами. Однак, я впевнений, що більшість з вас не зможе відповісти на всі правильно.

function fn(args){
console.log(args);
}

fn('orange','apple','grapes');

function fn(arg1,...args){
console.log(args);
}
fn('orange','apple','grapes');

function fn([arg1, arg2]){
console.log(arg1);
}
fn('orange','apple','grapes');

function fn([arg1,arg2,arg3]){
console.log(arg1,arg2,arg3);
}
fn(['orange','apple','grapes']);

function fn([arg1,...arg2]){
console.log(arg1,arg2);
}
fn('orange','apple','grapes');

Тепер давайте розглянемо пояснення до деяких із цих прикладів:

1) Одиничний параметр:

function fn(args){
console.log(args);
}

fn('orange','apple','grapes');//orange

Ми передаємо три аргументи, але за допомогою цього синтаксису JavaScript розглядатиме лише перший аргумент.

2) Оператор Rest:

function fn(arg1,...args){
console.log(args);
}

fn('orange','apple','grapes');//['apple', 'grapes']

Оператор Rest збирає всі аргументи, передані функції, перетворює їх на масив і присвоює цей масив змінній args. Варто зазначити, що оператор Rest працює лише в кінці, тому наступний код буде некоректним:

function fn(...args,arg2){
console.log(args);
}

3) Деструктуризація параметрів:

[] очікує на масив як аргумент і деструктурує його:

function fn([arg1,arg2,arg3]){
console.log(arg1,arg2,arg3);
}

fn(['orange','apple','grapes']);// orange apple grapes

А що виведе цей код:

function fn([arg1, arg2]){
console.log(arg1);
}

fn('orange','apple','grapes');

Ми передаємо лише один аргумент — перше значення 'orange'. Оскільки [] очікує масив, але ми передаємо рядок, він перетворюється на масив: ['o', 'r', 'a', 'n', 'g', 'e'], і буде взято перші два елементи, тому результат буде:

// o r

Перекладено з: Think You Know JavaScript? These Simple-Looking Questions Might Prove You Wrong!