Наскільки безпечно перевантажити функцію javascript?

Скажімо, я маю:

function myFunk(param1) {
    if (param1) {
           //do stuff
    } 
}

і я змінюю це ...

function myFunk(param1, param2) {
    if (param2) {
           //do stuff
    }
}

Параметр2 може бути колись правдою або помилковим. Це безпечно?

3
Що ви маєте на увазі під "безпечним"?
додано Автор Denys Séguret, джерело
І що ви маєте на увазі з "перевантаженням"? Ви змінюєте цю функцію, не перевантажуючи її.
додано Автор Denys Séguret, джерело
І що ви маєте на увазі з "перевантаженням"? Ви змінюєте цю функцію, не перевантажуючи її.
додано Автор Denys Séguret, джерело
Що ви маєте на увазі під "безпечним"?
додано Автор Denys Séguret, джерело
додано Автор PP., джерело
додано Автор PP., джерело
Функції не можуть перевантажуватись у JavaScript, оскільки аргументи невиразні. Також ви можете визначити функцію, що відповідає 2 args, але ви можете передавати більше/менше, ніж 2 аргументи, і це не буде збігатися. Отже, що ви робите, це заміняє ту саму функцію з новим визначенням.
додано Автор mohkhan, джерело
Функції не можуть перевантажуватись у JavaScript, оскільки аргументи невиразні. Також ви можете визначити функцію, що відповідає 2 args, але ви можете передавати більше/менше, ніж 2 аргументи, і це не буде збігатися. Отже, що ви робите, це заміняє ту саму функцію з новим визначенням.
додано Автор mohkhan, джерело
Ну, що буде працювати, але його не перевантажує його заміна однієї функції з іншою.
додано Автор Mark Broadhurst, джерело
Ну, що буде працювати, але його не перевантажує його заміна однієї функції з іншою.
додано Автор Mark Broadhurst, джерело

7 Відповіді

  функція myFunk (param1, param2) {
    якщо (param2) {
            // робити речі
    }
}
 
     

Параметр 2 може бути тільки вірним або хибним.

Ні. Це може мати будь-яке значення. Якщо функція викликається лише одним аргументом ( myFunk ("щось") ), то param2 матиме значення undefined . Звичайно, що таке фальші (наприклад, null , 0 або NaN ), -затвердження не буде виконано.

Це безпечно?

It's the standard way to have optional arguments in JavaScript, yes. For further details see Function overloading in Javascript - Best practices

2
додано
  функція myFunk (param1, param2) {
    якщо (param2) {
            // робити речі
    }
}
 
     

Параметр 2 може бути тільки вірним або хибним.

Ні. Це може мати будь-яке значення. Якщо функція викликається лише одним аргументом ( myFunk ("щось") ), то param2 матиме значення undefined . Звичайно, що таке фальші (наприклад, null , 0 або NaN ), -затвердження не буде виконано.

Це безпечно?

It's the standard way to have optional arguments in JavaScript, yes. For further details see Function overloading in Javascript - Best practices

2
додано

Функція перевантаження неможлива в javascript, якщо ви зробили дві функції однієї і тієї ж назви в тій самій області, завжди остання функція з таким ім'ям буде викликана незалежно від кількості параметрів.

1
додано
Я також хотів би знати, як і моя відповідь.
додано Автор Joe Frambach, джерело
Так, я випадково понизив голос. :-(
додано Автор Mark Broadhurst, джерело
Downwote ??? будь-які причини ...
додано Автор Pranav Singh, джерело
Ну, якщо хтось запитує, що це неможливо на одній мові, ви можете лише сказати, що це неможливо. Будь-яке подальше пояснення - трата часу на конкретне
додано Автор Pranav Singh, джерело

Функція перевантаження неможлива в javascript, якщо ви зробили дві функції однієї і тієї ж назви в тій самій області, завжди остання функція з таким ім'ям буде викликана незалежно від кількості параметрів.

1
додано
Я також хотів би знати, як і моя відповідь.
додано Автор Joe Frambach, джерело
Так, я випадково понизив голос. :-(
додано Автор Mark Broadhurst, джерело
Downwote ??? будь-які причини ...
додано Автор Pranav Singh, джерело
Ну, якщо хтось запитує, що це неможливо на одній мові, ви можете лише сказати, що це неможливо. Будь-яке подальше пояснення - трата часу на конкретне
додано Автор Pranav Singh, джерело

У такому випадку, я вважаю, було б більш зрозуміло, якщо ви використовуєте підхід функціональних змін.

var myFunk = function(param1) {
    if (param1) {
           //do stuff
    } 
}

and I alter this to ...

myFunk = function(param1, param2) {
    if (param2) {
           //do stuff
    }
}

Тепер дуже ясно, що відбувається, і попередня версія функції myFunc ніде не існує.

edit more info

Якщо ви називаєте функцію (param1, param2) {} лише одним параметром, то typeof param2 == "undefined" поверне істину. Наприклад:

myFunk = function(param1, param2) {
    if (typeof param2 == "undefined") {
       //do stuff with only param1
    }
}
0
додано
Я думаю, що він означав "зміну коду" замість "перезапису з другим визначенням"
додано Автор Bergi, джерело
Я не слідкую за тим, що ти маєш на увазі.
додано Автор Joe Frambach, джерело
Хто знає, що означає ОП? Питання, яке ця невизначена, заслуговує на закриття.
додано Автор Joe Frambach, джерело
І це буде ваша власна провина. Те ж саме відбудеться, якщо ви помилите ім'я змінної де завгодно
додано Автор Joe Frambach, джерело
додано Автор Joe Frambach, джерело
Це страшна причина скинути це. Використання typeof - це прийнятний спосіб перевірки для визначення
додано Автор Joe Frambach, джерело
Ні ... typeof повертає рядок. Це безпечно для випадку, коли undefined перевизначено.
додано Автор Joe Frambach, джерело
якщо у вас був typeof para2 == "undefined" завжди буде помилковим, де, як це повинно бути помилка, оскільки ви помилилися param2 . undefined глобальний, тому завжди існує (хоча його можна перевизначити).
додано Автор Mark Broadhurst, джерело
так, див. undefined , може бути, напевно, завжди визначено, і якщо ви помилили ваш параметр, я б вважав за краще помилку, а не безмовний збій.
додано Автор Mark Broadhurst, джерело
саме тому я скинув typeof з мого коду.
додано Автор Mark Broadhurst, джерело
ви повинні використовувати param2 === undefined , а не строкову версію.
додано Автор Mark Broadhurst, джерело
+1, за відмінне пояснення, чому перевантаження неможливе
додано Автор Pranav Singh, джерело

У такому випадку, я вважаю, було б більш зрозуміло, якщо ви використовуєте підхід функціональних змін.

var myFunk = function(param1) {
    if (param1) {
           //do stuff
    } 
}

and I alter this to ...

myFunk = function(param1, param2) {
    if (param2) {
           //do stuff
    }
}

Тепер дуже ясно, що відбувається, і попередня версія функції myFunc ніде не існує.

edit more info

Якщо ви називаєте функцію (param1, param2) {} лише одним параметром, то typeof param2 == "undefined" поверне істину. Наприклад:

myFunk = function(param1, param2) {
    if (typeof param2 == "undefined") {
       //do stuff with only param1
    }
}
0
додано
Я думаю, що він означав "зміну коду" замість "перезапису з другим визначенням"
додано Автор Bergi, джерело
Я не слідкую за тим, що ти маєш на увазі.
додано Автор Joe Frambach, джерело
Хто знає, що означає ОП? Питання, яке ця невизначена, заслуговує на закриття.
додано Автор Joe Frambach, джерело
І це буде ваша власна провина. Те ж саме відбудеться, якщо ви помилите ім'я змінної де завгодно
додано Автор Joe Frambach, джерело
додано Автор Joe Frambach, джерело
Це страшна причина скинути це. Використання typeof - це прийнятний спосіб перевірки для визначення
додано Автор Joe Frambach, джерело
Ні ... typeof повертає рядок. Це безпечно для випадку, коли undefined перевизначено.
додано Автор Joe Frambach, джерело
якщо у вас був typeof para2 == "undefined" завжди буде помилковим, де, як це повинно бути помилка, оскільки ви помилилися param2 . undefined глобальний, тому завжди існує (хоча його можна перевизначити).
додано Автор Mark Broadhurst, джерело
так, див. undefined , може бути, напевно, завжди визначено, і якщо ви помилили ваш параметр, я б вважав за краще помилку, а не безмовний збій.
додано Автор Mark Broadhurst, джерело
саме тому я скинув typeof з мого коду.
додано Автор Mark Broadhurst, джерело
ви повинні використовувати param2 === undefined , а не строкову версію.
додано Автор Mark Broadhurst, джерело
+1, за відмінне пояснення, чому перевантаження неможливе
додано Автор Pranav Singh, джерело

Ви не можете перевантажувати функції в javascript. ви краще перевіряти аргументи або перевіряти undefined , щоб побачити, що робить абонент, який намагається зробити це. наприклад

function myFunk(param1, param2) {
    if (param2) {
           //do stuff
    }
}

myFunk(1);//if does not execute

myFunk(1, 2);//if executes

однак, якщо ви передаєте фальшиве значення для другого параметра, тоді якщо, як і раніше, не буде виконано

myFunk(1,0); //if does not execute
0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram