ජාවාස්ක්‍රිප්ට් ශ්‍රිතයක් සඳහා පෙරනිමි පරාමිති අගයක් සකසන්න


2375

ජාවාස්ක්‍රිප්ට් ශ්‍රිතයකට මා විසින් පෙරනිමියක් සකසා ඇති විකල්ප තර්ක ලබා ගැනීමට කැමතියි, එය අගය අර්ථ දක්වා නොමැති නම් භාවිතා කරනු ඇත (සහ අගය සම්මත වුවහොත් නොසලකා හරිනු ලැබේ). රූබි හි ඔබට මේ ආකාරයට කළ හැකිය:

def read_file(file, delete_after = false)
  # code
end

මෙය ජාවාස්ක්‍රිප්ට් හි ක්‍රියාත්මක වේද?

function read_file(file, delete_after = false) {
  // Code
}

Answers:


3307

ES6 / ES2015 සිට , පෙරනිමි පරාමිතීන් භාෂා පිරිවිතරයේ ඇත.

function read_file(file, delete_after = false) {
  // Code
}

වැඩ කරනවා.

යොමුව: පෙරනිමි පරාමිතීන් - MDN

පෙරනිමි ශ්‍රිත පරාමිතීන් කිසිදු අගයක් හෝ නිර්වචනය කර නොමැති නම් විධිමත් පරාමිතීන් පෙරනිමි අගයන් සමඟ ආරම්භ කිරීමට ඉඩ දෙයි .

විනාශ කිරීම හරහා ඔබට පෙරනිමි නම් කළ පරාමිතීන් අනුකරණය කළ හැකිය :

// the `= {}` below lets you call the function without any parameters
function myFor({ start = 5, end = 1, step = -1 } = {}) { // (A)
    // Use the variables `start`, `end` and `step` here
    ···
}

පෙර ES2015 ,

ක්‍රම රාශියක් ඇත, නමුත් මෙය මා වඩාත් කැමති ක්‍රමයයි - එය ව්‍යාජ හෝ ශුන්‍ය ඇතුළුව ඔබට අවශ්‍ය ඕනෑම දෙයක් සමත් වීමට ඉඩ සලසයි. ( typeof null == "object")

function foo(a, b) {
  a = typeof a !== 'undefined' ? a : 42;
  b = typeof b !== 'undefined' ? b : 'default_b';
  ...
}

217
ඔබට එය එබඳු ලෙස සංයුක්ත කළ හැකිය: function defaultFor(arg, val) { return typeof arg !== 'undefined' ? arg : val; }ඉන්පසු ඔබට එය හැඳින්විය හැකියa = defaultFor(a, 42);
කැමිලෝ මාටින්

6
I සයිප්ලස් සහ ඔබට undefinedවස්තු භාවිතා කිරීමට උත්සාහ කරන අතරතුර නොමිලේ අමතර යොමු දෝෂ තිබේ : p එය සමහර බ්‍රව්සර් සමඟ වැඩ කළ හැකි හා වේගවත් විය හැකි වුවත්, nullඑය තවමත් වස්තුවක් වන අතර undefinedඑය පවතින බව පැවසීමට උත්සාහ කරන ප්‍රාථමික වර්ගයට යොමු වේ. මෙහි කිසිවක් නැත, පවා නැත null. මෙහි අවස්ථා දෙකම කෙටියෙන් බලන්න: JavaScript / Reference / Global_Objects / undefined .
සාම්පෝ සරරාලා - codidact.org

9
ඔබ වස්තුවක දේපල පරීක්ෂා කරන්නේ නම් typeofඅතිරික්ත වේ. function foo(data) { var bar = data.bar !== undefined ? data.bar : 'default'; }මෙය යොමු දෝෂ නොතබන අතර එය සංක්ෂිප්ත ය.
ඩියාමිඩ්

10
එය සැබවින්ම සුළු බව මම දනිමි, නමුත් ඔබ පවරා ඇති ආකාරය a = aසහ b = bඑම පරාමිතීන් නිර්වචනය නොකළ විට මම කැමති නැත . එසේම, තරමක් සංකීර්ණ තත්ත්වයක් ඇති එම තෘතීය ක්‍රියාකරුට අනාගත නඩත්තු කරන්නන් සඳහා කියවීමට අපහසු විය හැකිය. පහත දැක්වෙන වාක්‍ය ඛණ්ඩයට මම කැමැත්තෙමි: if (typeof a == 'undefined') a = 42- අනවශ්‍ය පැවරුමක් සහ කියවීමට ටිකක් පහසු නැත.
තාත්තා 32

12
භාවිතා කිරීමට හේතුවක් typeofතිබේද? එය කිරීම සරල බව පෙනේ a === undefined. ප්ලස් ඒ ආකාරයෙන් ඔබ undefinedඑදිරිව අක්ෂර වින්‍යාසය වැරදියට ලිවුවහොත් එය යොමු දෝෂයක් ඇති වේ.
අබේ වොල්කර්

601
function read_file(file, delete_after) {
    delete_after = delete_after || "my default here";
    //rest of code
}

මෙම පැවරුම් delete_afterවටිනාකම delete_afterඑය නොවේ නම් falsey එය වැල පවරයි එසේ අගය "my default here". වැඩි විස්තර සඳහා, ඩග් ක්‍රොක්ෆර්ඩ්ගේ භාෂාව පිළිබඳ සමීක්ෂණය බලන්න සහ ක්‍රියාකරුවන් පිළිබඳ කොටස බලන්න .

මෙම ප්රවේශය නැහැ ඔයා සමත් කිරීමට අවශ්ය නම් වැඩ කරන්නේ falsey අගය එනම් false, null, undefined, 0හෝ "". ඔබට අවශ්ය නම්, falsey ඔබ සම්මත කිරීමට වටිනාකම් ක්රමය භාවිතා කිරීමට අවශ්ය වනු ඇත ටොම් Ritter පිළිතුර .

ශ්‍රිතයකට පරාමිති ගණනාවක් සමඟ කටයුතු කරන විට, බොහෝ විට පාරිභෝගිකයාට වස්තුවක පරාමිති තර්ක සම්මත කිරීමට ඉඩ දීම සහ පසුව ශ්‍රිතය සඳහා පෙරනිමි අගයන් අඩංගු වස්තුවක් සමඟ මෙම අගයන් ඒකාබද්ධ කිරීම ප්‍රයෝජනවත් වේ.

function read_file(values) {
    values = merge({ 
        delete_after : "my default here"
    }, values || {});

    // rest of code
}

// simple implementation based on $.extend() from jQuery
function merge() {
    var obj, name, copy,
        target = arguments[0] || {},
        i = 1,
        length = arguments.length;

    for (; i < length; i++) {
        if ((obj = arguments[i]) != null) {
            for (name in obj) {
                copy = obj[name];

                if (target === copy) {
                    continue;
                }
                else if (copy !== undefined) {
                    target[name] = copy;
                }
            }
        }
    }

    return target;
};

භාවිතා කිරීමට

// will use the default delete_after value
read_file({ file: "my file" }); 

// will override default delete_after value
read_file({ file: "my file", delete_after: "my value" }); 

115
මට මෙය ප්‍රමාණවත් නොවන බව පෙනේ, මන්ද මට අසත්‍යය සම්මත කිරීමට අවශ්‍ය විය හැකිය.
ටොම් රිටර්

52
බොහෝ අවස්ථාවන් සඳහා එය ප්‍රමාණවත් බව මට පෙනේ
රස් කැම්

50
ව්‍යාජ අගයන් සඳහා එය ක්‍රියා නොකරන නිසා, එය නඩත්තු බියකරු සිහිනයක් නිර්මාණය කරයි. මීට පෙර සෑම විටම සත්‍ය අගයන් සම්මත කර ඇති හා හදිසියේම අසමත් වන කේතයක්, වැරදිසහගත එකක් සම්මත වී ඇති හෙයින් වඩාත් ශක්තිමත් ප්‍රවේශයක් ලබා ගත හැකි තැනින් වැළකී සිටිය යුතුය.
jinglesthula

1
මේ අවස්ථාවේ දී, delete_afterප්‍රකාශනයේ බූලියන් ප්‍රති result ලය නොලැබෙන්නේ delete_after || "my default value"කෙසේද?
xbonez

3
හෝ, ඔබට වැරදිසහගත අගයකට පෙරනිමිය හැකිය - එය කෙසේ වෙතත් සාමාන්‍යයෙන් හොඳ පෙරනිමියකි (උදා: බූල් සඳහා අසත්‍යය, නූල් සඳහා හිස් නූල, අංක සඳහා 0 යනාදිය) - එවැනි අවස්ථාවකදී එය ඇත්ත වශයෙන්ම වැදගත් නොවේ සමත් විය.
මාර්ක් බ්‍රැකට්

151

පෞද්ගලිකව වඩා සංක්ෂිප්ත හා කියවිය හැකි මේ වගේ සරල දෙයක් මට පෙනේ.

function pick(arg, def) {
   return (typeof arg == 'undefined' ? def : arg);
}

function myFunc(x) {
  x = pick(x, 'my default');
} 

6
යාවත්කාලීන කිරීම: ඔබ දැනටමත් underscore.js භාවිතා කරන්නේ නම් එය භාවිතා කිරීම ඊටත් වඩා හොඳ බව මට පෙනේ _.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"});. මෙම පිළිතුරේ පෙන්වා ඇති පරිදි ගෝලීය නාම අවකාශය භාවිතා කිරීම බොහෝ දෙනා නරක පුරුද්දක් ලෙස සලකනු ලැබේ. මෙම පොදු කාර්යය සඳහා ඔබේම උපයෝගීතාව පෙරළීම ගැනද ඔබට සලකා බැලිය හැකිය (උදා. util.default(arg, "defaul value")) යටි ඉරි ලකුණු භාවිතා කිරීමට අවශ්‍ය නැතිනම්, නමුත් මම බොහෝ විට අවසන් කරන්නේ ඉක්මණින් හෝ පසුව කෙසේ වෙතත් යටි ඉරි ලකුණු භාවිතා කිරීම රෝදය ප්‍රතිනිර්මාණය කිරීමේ කිසිදු තේරුමක් නැත.
ඇන්ඩර්සෑන්ඩ්

2
මම ඇත්ත වශයෙන්ම මෙය නිර්දේශ කරමි, මම එය භාවිතා කර එය "පෝර්" ලෙස හඳුන්වන්නේ "පරාමිතිය හෝ" යන්නයි
සුපිරි


3
S ඔසාමාබින් ලොජින් වර්තමාන ජේඑස් සඳහා ඔබ පවසන දේ නිවැරදියි - පැරණි පරීක්ෂණය දිගටම පවතින්නේ සමහර බ්‍රව්සර්වල undefinedවෙනත් අගයක් සමඟ නැවත ලිවීමට හැකි වූ නිසා පරීක්ෂණය අසාර්ථක විය.
ඇල්නිටැක්

2
L ඇල්නිටැක්: එය ඉක්මවා යා හැකිය undefined. ඒ නිසා, එය භාවිතා කිරීම හොඳ අදහසක් තවමත් තියෙන්නේ typeofහා 'undefined'.
එල්එස්

64

ECMAScript 6 හි ඔබට ඇත්ත වශයෙන්ම ඔබ සතුව ඇති දේ හරියටම ලිවීමට හැකි වනු ඇත:

function read_file(file, delete_after = false) {
  // Code
}

මෙය නොපවතී නම් මෙය සකසනු delete_afterඇත . අද ඔබට බාබෙල් වැනි ප්‍රවාහකයන් සමඟ මෙවැනි ES6 විශේෂාංග භාවිතා කළ හැකිය .falseundefined

වැඩි විස්තර සඳහා MDN ලිපිය බලන්න .


1
ECMAScript 6 මම හිතන්නේ ... (මා විසින්ම නිවැරදි කර ගත හැකි නමුත් මට සංස්කරණයන් කළ නොහැක <6 අක්ෂර)
Zac

1
ඕනෑම බ්‍රව්සරයක් එනතෙක් බලා සිටීම ECMAScript 6
ඇඩ්‍රියානෝ රෙසෙන්ඩේ

1
බාබෙල් මෙය පරිවර්තනය කරන්නේ කුමක් සඳහාද?
harryg


2
මෙන්න ES6 kangax.github.io/compat-table/es6/#default_function_parameters සඳහා වන අනුකූලතා වගුව අවාසනාවකට මෙම සින්ටැක්ස් සඳහා තවමත් සහය නොදක්වයි .
freemanoid

28

පෙරනිමි පරාමිති අගයන්

ES6 සමඟ, JavaScriptශ්‍රිත පරාමිතියක් සඳහා පෙරනිමි අගයක් සැකසීමට අදාළව ඔබට වඩාත් පොදු මෝඩයන්ගෙන් එකක් කළ හැකිය . අපි වසර ගණනාවක් තිස්සේ මෙය කර ඇති ආකාරය හුරුපුරුදු විය යුතුය:

function foo(x,y) {
 x = x || 11;
 y = y || 31;
 console.log( x + y );
}
foo(); // 42
foo( 5, 6 ); // 11
foo( 5 ); // 36
foo( null, 6 ); // 17

මෙම රටාව වැඩිපුරම භාවිතා වන නමුත් අප වැනි අගයන් පසු කරන විට එය භයානක ය

foo(0, 42)
foo( 0, 42 ); // 53 <-- Oops, not 42

මන්ද? මක්නිසාද යත් 0 is falsy, x || 11 results in 11කෙලින්ම 0 දී සම්මත නොවූ නිසා ය . මෙම ගොචා නිවැරදි කිරීම සඳහා, සමහර අය ඒ වෙනුවට චෙක්පත වඩාත් වාචිකව ලියනු ඇත:

function foo(x,y) {
 x = (x !== undefined) ? x : 11;
 y = (y !== undefined) ? y : 31;
 console.log( x + y );
}
foo( 0, 42 ); // 42
foo( undefined, 6 ); // 17

ES6නැතිවූ තර්ක සඳහා පෙරනිමි අගයන් පැවරීම විධිමත් කිරීම සඳහා එකතු කරන ලද හොඳ ප්‍රයෝජනවත් වාක්‍ය ඛණ්ඩයක් දැන් අපට පරීක්ෂා කළ හැකිය :

function foo(x = 11, y = 31) {
 console.log( x + y );
}

foo(); // 42
foo( 5, 6 ); // 11
foo( 0, 42 ); // 42
foo( 5 ); // 36
foo( 5, undefined ); // 36 <-- `undefined` is missing
foo( 5, null ); // 5 <-- null coerces to `0`
foo( undefined, 6 ); // 17 <-- `undefined` is missing
foo( null, 6 ); // 6 <-- null coerces to `0`

x = 11ශ්‍රිත ප්‍රකාශනයක x !== undefined ? x : 11දී වඩාත් පොදු මෝඩයට වඩා සමාන යx || 11

පෙරනිමි අගය ප්‍රකාශන

Functionපෙරනිමි අගයන් 31 වැනි සරල අගයන්ට වඩා වැඩි විය හැකිය; ඒවා ඕනෑම වලංගු ප්‍රකාශනයක් විය හැකිය, a function call:

function bar(val) {
 console.log( "bar called!" );
 return y + val;
}
function foo(x = y + 3, z = bar( x )) {
 console.log( x, z );
}
var y = 5;
foo(); // "bar called"
 // 8 13
foo( 10 ); // "bar called"
 // 10 15
y = 6;
foo( undefined, 10 ); // 9 10

ඔබට පෙනෙන පරිදි, පෙරනිමි අගය ප්‍රකාශන කම්මැලි ලෙස තක්සේරු කරනු ලැබේ, එයින් අදහස් වන්නේ ඒවා ක්‍රියාත්මක වන්නේ ඒවා අවශ්‍ය නම් සහ අවශ්‍ය වූ විට පමණි - එනම් පරාමිති තර්කය මඟ හැරුණු විට හෝ නිර්වචනය නොකළ විට පමණි.

පෙරනිමි අගය ප්‍රකාශනය පේළිගත ශ්‍රිත ප්‍රකාශන ඇමතුමක් විය හැකිය - පොදුවේ හැඳින්වෙන්නේ ක්ෂණිකව ආයාචිත ශ්‍රිත ප්‍රකාශනය ලෙස ය (IIFE):

function foo( x =
 (function(v){ return v + 11; })( 31 )
) {
 console.log( x );
}
foo(); // 42

14

එම විසඳුම js හි මට වැඩකි:

function read_file(file, delete_after) {
    delete_after = delete_after || false;
    // Code
}

4
නම් කුමක් සිදු වේද delete_afterවේ 0හෝ null? මෙම අවස්ථා සඳහා එය නිවැරදිව ක්‍රියා නොකරනු ඇත.
දිමිත්‍රි පව්ලුටින්

St ස්ටෙෆාන් බිජ්සිටර් එය සත්‍ය වන්නේ සමහර අවස්ථාවල පමණි. පෙරනිමි අගයන් අගයන් සැකසීමට ඔබට අවශ්‍ය නම් මෙය ක්‍රියාත්මක වූයේ නැත, මන්ද 0 හෝ ශුන්‍ය! === අසත්‍යය.
රුට්‍රස්

Ut රුට්‍රස්: ඔබ කියූ කිසිවක් මට තේරෙන්නේ නැහැ.
ස්ටෙෆාන් බිජ්සිටර්

කුමක් ගැනද delete_after = delete_after === undefined ? false : delete_after?
aashah7

11

නිර්වචනය නොකළ පැහැදිලි සංසන්දනයක් භාවිතා කරන්න.

function read_file(file, delete_after)
{
    if(delete_after === undefined) { delete_after = false; }
}

11

ජාවාස්ක්‍රිප්ට් හි පෙරනිමි පරාමිති අගයන් භාවිතා කිරීමේදී මම අතිශයින්ම ප්‍රවේශම් වන්නෙමි. වැනි ඉහළ ගණයේ කාර්යයන් සමඟ එක්ව භාවිතා කරන විට එය බොහෝ විට දෝෂ නිර්මාණය forEach, mapහා reduce. උදාහරණයක් ලෙස, මෙම කේත රේඛාව සලකා බලන්න:

['1', '2', '3'].map(parseInt); // [1, NaN, NaN]

parseInt හට විකල්ප දෙවන පරාමිති function parseInt(s, [රේඩික්ස් ඇත,=10]) නමුත් සිතියම් parseIntතර්ක තුනක් සමඟ අමතයි : ( මූලද්‍රව්‍යය , දර්ශකය සහ අරාව ).

ඔබේ විකල්ප / පෙරනිමි වටිනා තර්ක වලින් ඔබට අවශ්‍ය පරාමිතීන් වෙන් කිරීමට මම යෝජනා කරමි. පෙරනිමි අගයක් තේරුමක් නැති ඔබේ ශ්‍රිතය අවශ්‍ය පරාමිති 1,2 ක් හෝ 3 ක් ගනී නම්, ඒවා ශ්‍රිතයට ස්ථානීය පරාමිතීන් බවට පත් කරන්න, ඕනෑම විකල්ප පරාමිතියක් තනි වස්තුවක නම් කළ ගුණාංග ලෙස අනුගමනය කළ යුතුය. ඔබේ ශ්‍රිතයට 4 ක් හෝ ඊට වැඩි කාලයක් ගත වුවහොත්, සමහර වස්තු පරාමිතිවල ගුණාංග හරහා සියලු තර්ක සැපයීම අර්ථවත් කරයි.

ඔබේ නඩුව මම ඔයාට මේ වගේ ඔබේ deleteFile කාර්යය ලියන්න යෝජනා කරන්නේ: ( එක් සංස්කරණය instead ගේ අදහස් ) ...

// unsafe
function read_file(fileName, deleteAfter=false) {
    if (deleteAfter) {
        console.log(`Reading and then deleting ${fileName}`);
    } else {
        console.log(`Just reading ${fileName}`);
    }
}

// better
function readFile(fileName, options) {
  const deleteAfter = !!(options && options.deleteAfter === true);
  read_file(fileName, deleteAfter);
}

console.log('unsafe...');
['log1.txt', 'log2.txt', 'log3.txt'].map(read_file);

console.log('better...');
['log1.txt', 'log2.txt', 'log3.txt'].map(readFile);

ඉහත ස්නිපටය ධාවනය කිරීමෙන් නිරූපණය වන්නේ භාවිතයට නොගත් පරාමිතීන් සඳහා පෙරනිමි තර්ක අගයන් පිටුපස සැඟවී ඇති අන්තරායන් ය.


1
මෙම "වඩා හොඳ විසඳුම" තරමක් කියවිය නොහැක. වැනි විචල්‍ය වර්ග පරීක්ෂා කර typeof deleteAfter === 'bool'ව්‍යතිරේකය විසි කිරීමට මම නිර්දේශ කරමි . සිතියම / foreach වැනි ක්‍රම භාවිතා කිරීමේදී ප්ලස් ඒවා පරිස්සමින් භාවිතා කරන්න. ['1', '2', '3'].map((value) => {read_file(value);})
ඒ වෙනුවට

ඒක හොඳ කාරණයක්. මගේ කේත ස්නිපටයේ පුස්තකාල භාවිතා කිරීමෙන් වැළකී සිටීමට මම උත්සාහ කළෙමි, නමුත් මෙම මෝඩකම පිරිසිදු ජාවාස්ක්‍රිප්ට් වල තරමක් අවුල් සහගතය. පුද්ගලිකව, මම මකාදැමීම getලබා ගැනීමට ලොඩාෂ් ක්‍රමය භාවිතා කරමි. ව්‍යතිරේකයක් විසි කිරීම typeof 'deleteAfter' !== 'bool'හොඳ විචක්ෂණශීලී පියවරක් විය හැකිය. අමතන්නාට "ප්‍රවේශම් වන්න" අවශ්‍ය ක්‍රම සැලසුම් කිරීමට මම කැමති නැත. අවවාදය නම් ශ්‍රිතයේ වගකීම මිස අමතන්නා නොවේ. අවසාන හැසිරීම අවම වශයෙන් පුදුම කිරීමේ මූලධර්මය අනුගමනය කළ යුතුය.
ඩග් කෝබර්න්

මම එකඟ වෙමි, එම ක්‍රමය ලිවිය යුතු නැත, එය ඇමතීමෙන් එහි හැසිරීම බිඳ දැමිය හැකිය. නමුත් ක්‍රියාකාරීත්වය ආකෘතියක් හා ඇමතුම් පාලකය හා සමාන බව මතක තබා ගන්න. ආකෘතිය දත්ත සැකසුම් ගැන සැලකිලිමත් විය යුතුය. ශ්‍රිතය (ක්‍රමය) අපේක්ෂා කළ යුත්තේ දත්ත, වැරදි ආකාරයෙන් සම්මත කර එය හැසිරවිය හැකි බවයි. පරාමිති වර්ගය පරීක්ෂා කිරීම සහ ව්‍යතිරේකය විසි කිරීම හොඳම ක්‍රමය වන්නේ එබැවිනි. එය වඩාත් සංකීර්ණ වුවද. නමුත් තවමත් එය ඔබේ හිස සීරීමෙන් ඔබව ගලවාගෙන දිගටම විමසනු ඇත ... එය වැඩ නොකරන්නේ ඇයි? ඊට පස්සෙ ... ඇයි වැඩ කරන්නේ?!
ඒ වෙනුවට

10

යාවත්කාලීනයක් ලෙස ... ECMAScript 6 සමඟින් ඔබට ක්‍රියා පරාමිති ප්‍රකාශනයන්හි පෙරනිමි අගයන් අවසාන වශයෙන් සැකසිය හැකිය :

function f (x, y = 7, z = 42) {
  return x + y + z
}

f(1) === 50

සඳහන් කර ඇති පරිදි - http://es6-features.org/#DefaultParameterValues


11
මෙම පිළිතුර අනුපිටපතක් බැවින් එය ප්‍රයෝජනවත් නොවේ
පරිශීලක

9

දීර් ++ කාලයක් C ++ සංවර්ධකයෙකු වීම (වෙබ් සංවර්ධනයට රූකි :)), මම මෙම තත්වය මුලින්ම හමු වූ විට, පහත දැක්වෙන පරිදි, ප්‍රශ්නයේ සඳහන් කර ඇති පරිදි, ශ්‍රිත අර්ථ දැක්වීමේ පරාමිති පැවරුම මම කළෙමි.

function myfunc(a,b=10)

නමුත් එය බ්‍රව්සර් හරහා නිරන්තරයෙන් ක්‍රියාත්මක නොවන බවට පරිස්සම් වන්න. මට එය මගේ ඩෙස්ක්ටොප් එකේ ක්‍රෝම් මත වැඩ කළ නමුත් ඇන්ඩ්‍රොයිඩ් හි ක්‍රෝම් මත ක්‍රියා කළේ නැත. බොහෝ දෙනා ඉහත සඳහන් කළ පරිදි ආරක්ෂිත විකල්පය නම් -

    function myfunc(a,b)
    {
    if (typeof(b)==='undefined') b = 10;
......
    }

මෙම පිළිතුර සඳහා අභිප්‍රාය වන්නේ අනෙක් අය දැනටමත් සඳහන් කර ඇති එකම විසඳුම් පුනරාවර්තනය කිරීම නොව, ක්‍රියාකාරී අර්ථ දැක්වීමේ පරාමිති පැවරුම සමහර බ්‍රව්සර් මත ක්‍රියාත්මක විය හැකි බව දැනුම් දීමයි, නමුත් ඒ මත විශ්වාසය නොතබන්න.


3
වින්ඩෝස් 8.1 සඳහා IE හි වඩාත්ම වර්තමාන අනුවාදය වන IE 11 හි ක්‍රියාකාරී අර්ථ දැක්වීම තුළ පැවරීම ද ක්‍රියා නොකරයි.
ඩිමෝ

1
යමෙකු පුදුම function myfunc(a,b=10)වන්නේ නම්, ES6 සින්ටැක්ස් නම්, වෙනත් පිළිතුරු වල අනුකූලතා වගු වෙත සබැඳි ඇත.
gcampbell

8

මයික්‍රොසොෆ්ට් එජ් හි කේත වැඩ කිරීමට කැමති ඕනෑම කෙනෙකුට, ක්‍රියාකාරී පරාමිතීන් තුළ පෙරනිමි භාවිතා නොකරන්න.

function read_file(file, delete_after = false) {
    #code
}

එම උදාහරණයේ දී එඩ්ජ් විසින් "අපේක්ෂා කිරීම") ""

මෙම භාවිතය වළක්වා ගැනීමට

function read_file(file, delete_after) {
  if(delete_after == undefined)
  {
    delete_after = false;
  }
  #code
}

2016 අගෝස්තු 08 වන විට මෙය තවමත් ගැටළුවක්


5

වාක්‍ය ඛණ්ඩයට අනුව

function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
   statements
}

විධිමත් පරාමිතීන්ගේ පෙරනිමි අගය ඔබට අර්ථ දැක්විය හැකිය. ටයිප් ඔෆ් ශ්‍රිතය භාවිතයෙන් නිර්වචනය නොකළ අගය ද පරීක්ෂා කරන්න .


5
function helloWorld(name, symbol = '!!!') {
    name = name || 'worlds';
    console.log('hello ' + name + symbol);
}

helloWorld(); // hello worlds!!!

helloWorld('john'); // hello john!!!

helloWorld('john', '(>.<)'); // hello john(>.<)

helloWorld('john', undefined); // hello john!!!

helloWorld(undefined, undefined); // hello worlds!!!

5

ඔබට නවතම ECMA6සින්ටැක්ස් භාවිතා කිරීමට අවශ්‍ය නම් මෙය භාවිතා කරන්න :

function myFunction(someValue = "This is DEFAULT!") {
  console.log("someValue --> ", someValue);
}

myFunction("Not A default value") // calling the function without default value
myFunction()  // calling the function with default value

එය හැඳින්වේ default function parameters. කිසිදු අගයක් හෝ නිර්වචනය කර නොමැති නම් විධිමත් පරාමිතීන් පෙරනිමි අගයන් සමඟ ආරම්භ කිරීමට එය ඉඩ දෙයි. සටහන : එය ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් හෝ පැරණි බ්‍රව්සර් සමඟ ක්‍රියා නොකරයි.

හැකි උපරිම අනුකූලතාව සඳහා මෙය භාවිතා කරන්න:

function myFunction(someValue) {
  someValue = (someValue === undefined) ? "This is DEFAULT!" : someValue;
  console.log("someValue --> ", someValue);
}

myFunction("Not A default value") // calling the function without default value
myFunction()  // calling the function with default value

මෙම එක් එක් උදාහරණය රඳා පවතින්නේ එම ශ්‍රිතය ඇමතීමේදී undefinedකිසිදු පරාමිති අගයක් සම්මත නොකළේ නම් පරාමිති විචල්‍යය වනු ඇති බැවිනි .


සටහන: la බ්ලැක්බයර්ඩ් පවසන පරිදි, ශ්‍රිතය (param = අගය) IE සමඟ වැඩ නොකරයි. අනුකූල අනුවාදය භාවිතා කරන්න.
මැජික්ලැම්ප්

5

ES6: බොහෝ පිළිතුරු වල දැනටමත් සඳහන් කර ඇති පරිදි, ES6 හි, ඔබට සරලවම අගය සමඟ පරාමිතියක් ආරම්භ කළ හැකිය.


ES5: දී ඇති පිළිතුරු බොහොමයක් මම එහිදී වැනි falsey වටිනාකම් සමත් වීමට සිදු විය හැකිය අවස්ථා නැති නිසා මට නොවේ ප්රමානවත් වේ 0, nullහා undefinedඋත්සවයකට කිරීමට. පරාමිතියක් නිර්වචනය කර නොමැතිද යන්න තීරණය කිරීම සඳහා එය නිර්වචනය නොකිරීම වෙනුවට මා සම්මත කළ අගයයි.

function foo (param1, param2) {
   param1 = arguments.length >= 1 ? param1 : "default1";
   param2 = arguments.length >= 2 ? param2 : "default2";
}

4

function throwIfNoValue() {
throw new Error('Missing argument');
}
function foo(argValue = throwIfNoValue()) {
return argValue ;
}

මෙහිදී foo () යනු argValue නම් පරාමිතියක් ඇති ශ්‍රිතයකි. ශ්‍රිත ඇමතුමෙහි අප කිසිවක් සමත් නොවන්නේ නම්, එවිට ශ්‍රිතය විසි කිරීම ඉෆ්නෝවාලූ () කැඳවනු ලබන අතර ලැබෙන ප්‍රති result ලය එකම තර්කය වන ආර්ග් අගය වෙත පවරනු ලැබේ. පෙරනිමි පරාමිතියක් ලෙස ශ්‍රිත ඇමතුමක් භාවිතා කළ හැකි ආකාරය මෙයයි. එමඟින් කේතය වඩාත් සරල හා කියවිය හැකි වේ.

මෙම උදාහරණය මෙතැනින් ගෙන ඇත


4

ඔබ භාවිතා කරන්නේ නම් ඔබට ES6+පෙරනිමි පරාමිතීන් පහත පරිදි සැකසිය හැකිය:

function test (foo = 1, bar = 2) {
  console.log(foo, bar);
}

test(5); // foo gets overwritten, bar remains default parameter

ඔබට ES5සින්ටැක්ස් අවශ්‍ය නම් ඔබට එය පහත පරිදි කළ හැකිය:

function test(foo, bar) {
  foo = foo || 2;
  bar = bar || 0;
  
  console.log(foo, bar);
}

test(5); // foo gets overwritten, bar remains default parameter

ඉහත වාක්‍ය ඛණ්ඩය තුළ ORක්‍රියාකරු භාවිතා වේ. මෙම ORමෙම පරිවර්තනය කළ හැකි නම් ක්රියාකරු හැම විටම පළමු අගය නැවත trueඑය righthandside අගය ආපහු නම්. අනුරූප තර්කයක් නොමැතිව ශ්‍රිතය කැඳවූ විට පරාමිති විචල්‍යය ( barඅපගේ උදාහරණයේ) undefinedJS එන්ජිම මඟින් සකසා ඇත . undefinedපසුව එය සාවද්‍ය බවට පරිවර්තනය වන අතර එමඟින් ORක්‍රියාකරු 0 අගය ලබා දෙයි.


4

ඔව්, පෙරනිමි පරාමිතීන් භාවිතා කිරීම ES6 හි පූර්ණ සහය දක්වයි :

function read_file(file, delete_after = false) {
  // Code
}

හෝ

const read_file = (file, delete_after = false) => {
    // Code
}

නමුත් ES5 ට පෙර ඔබට මෙය පහසුවෙන් කළ හැකිය:

function read_file(file, delete_after) {
  var df = delete_after || false;
  // Code
}

එයින් අදහස් වන්නේ අගය තිබේ නම්, අගය භාවිතා කරන්න, එසේ නොමැති නම්, ||මෙහෙයුමෙන් පසු දෙවන අගය එකම දේ කරන ...

සටහන: එසේම ඔබ ES6 එකක් වෙත වටිනාකමක් ලබා දුන්නොත් ඒවා අතර විශාල වෙනසක් ඇත, එහි වටිනාකම පවා ව්‍යාජ වේ, එය නව අගයක් මගින් ප්‍රතිස්ථාපනය වේ, වැනි දෙයක් nullහෝ ""... නමුත් ES5 එකක් ප්‍රතිස්ථාපනය වන්නේ සම්මත අගය පමණක් නම් පමණි සත්‍යය, එයට හේතුව ||වැඩ කරන ආකාරයයි ...


3

යම් හේතුවක් නිසා නම්, ඔබ නොවන ES6 හා ඇත භාවිතා lodashමෙතන හරහා කාර්යයන් සඳහා වන පරාමිතීන් පැහර සංක්ෂිප්ත ක්රමයකි _.defaultToක්රමය:

var fn = function(a, b) {
  a = _.defaultTo(a, 'Hi')
  b = _.defaultTo(b, 'Mom!')

  console.log(a, b)
}

fn()                 // Hi Mom!
fn(undefined, null)  // Hi Mom!
fn(NaN, NaN)         // Hi Mom!
fn(1)                // 1 "Mom!"
fn(null, 2)          // Hi 2
fn(false, false)     // false false
fn(0, 2)             // 0 2
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

වත්මන් අගය NaN , ශුන්‍ය හෝ නිර්වචනය නොකළහොත් පෙරනිමිය සැකසෙනු ඇත


2

අනාගත ශබ්ද

අනාගතයේ දී, ඔබට එක් වස්තුවක් තවත් වස්තුවකට "පැතිරවීමට" හැකි වනු ඇත (දැනට 2019 වන විට එඩ්ජ් සහාය නොදක්වයි !) - ඇණවුම නොසලකා හොඳ පෙරනිමි විකල්ප සඳහා එය භාවිතා කරන්නේ කෙසේද යන්න නිරූපණය කරන්න:

function test(options) {
    var options = {
       // defaults
       url: 'defaultURL',
       some: 'somethingDefault',
       // override with input options
       ...options
    };
    
    var body = document.getElementsByTagName('body')[0];
    body.innerHTML += '<br>' + options.url + ' : ' + options.some;
}
test();
test({});
test({url:'myURL'});
test({some:'somethingOfMine'});
test({url:'overrideURL', some:'andSomething'});
test({url:'overrideURL', some:'andSomething', extra:'noProblem'});

MDN යොමුව: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Sread_syntax

... මේ අතර එඩ්ජ්ගේ සහාය වන්නේ Object.assign () (IE එසේ නොවේ, නමුත් මම විශ්වාස කරනවා අපට IE අතහැර දැමිය හැකිය :))

ඒ හා සමානව ඔබට කළ හැකිය

    function test(options) {
        var options = Object.assign({
           // defaults
           url: 'defaultURL',
           some: 'somethingDefault',
        }, options); // override with input options
        
        var body = document.getElementsByTagName('body')[0];
        body.innerHTML += '<br>' + options.url + ' : ' + options.some;
    }
    test();
    test({});
    test({url:'myURL'});
    test({some:'somethingOfMine'});
    test({url:'overrideURL', some:'andSomething'});
    test({url:'overrideURL', some:'andSomething', extra:'noProblem'});

සංස්කරණය: හේතුවෙන් සම්බන්ධයෙන් අදහස් දක්වා constවිකල්ප - එම ශ්රිතයේ සෙසු ප්රදේශවල නිරන්තර විකල්ප භාවිතා කර ඇති ප්රශ්නය සත්ය වන නොවේ වනු ඔබ - ඔබ ඒක කරන්න නොහැකි බව, ඔබ එහි ම ප්රකාශ තුල නිරන්තර විචල්ය භාවිතා කළ නොහැකි පමණක් බව ය ආදාන නම් කිරීම වැනි දෙයකට වෙනස් කිරීමට

function test(input_options){
   const options = {
     // defaults
     someKey:    'someDefaultValue',
     anotherKey: 'anotherDefaultValue',

     // merge-in input options
     ...input_options
   };

   // from now on use options with no problem
}

ගැටළුව නම් ඔබට සාමාන්‍යයෙන් කිසි විටෙකත් එසේ කිරීමට අවශ්‍ය නොවීමයි. මන්දයත් මෙය දැනටමත් අර්ථ දක්වා ඇති විකල්පයන් නැවත ලබා දෙන නමුත් ඔබට එය වෙනත් var සමඟ භාවිතා කළ හැකිය.
frank-dspeed

ශ්‍රිත පරීක්ෂණය (විකල්ප) {/ * විකල්පයන් අර්ථ දක්වා ඇත්තේ ඔබ const options = {} now * /}
frank-dspeed

ඔබ ශ්‍රිතයක් නිර්මාණය කරන විට ගෝලීය නොවන අතර ඔබ තර්ක නාම විකල්පයන් ලෙස ඇතුල් වන විට ශ්‍රිත විකල්පයන් ඇතුළත ශ්‍රිතය තුළ අර්ථ දැක්වේ (විකල්පය)}} විකල්පය අර්ථ දැක්වෙන්නේ ඔබට එම ශ්‍රිතය තුළ const opt ​​භාවිතා කළ නොහැකි අතර මෙය නරක නිසා විචල්ය නැවත පැවරීම ඔබ බොහෝ විට කරන්නේ නම් සහ එය ඔබේ සාමාන්‍ය රටාව මෙන් පෙනේ නම් මෙය ගැටළුවක් වේ
frank-dspeed

@ google-frank-dspeed අහ්, ඔබ අදහස් කරන්නේ ඔබට කළ නොහැකි බවයි function(opt){ const opt = /*some merging*/; }? එය ප්‍රකාශයට පත් කිරීමට පෙර විචල්‍යය භාවිතා කරන බැවින් එය ක්‍රියාconst නොකරනු ඇත - ඔබට සකස් කළ යුතුව ඇත -function test(input_opt){ const opt = { someKey: 'someDefaultValue', ...input_opt} }
jave.web

@ google-frank-dspeed කෙසේ වෙතත් තවත් නව පුද්ගලයින් මේ ගැන පුදුම වනු ඇත, එබැවින් මම සංස්කරණය කළ යුතු ආකාරය එකතු කර ඇත්තෙමි :) එබැවින් අනෙක් අයට එය පෙන්වා දීම ගැන ස්තූතියි :)
jave.web

1

මගේ කුසලතා ප්‍රදර්ශනය කිරීම සඳහා (lol), ඉහත ශ්‍රිතය පහත පරිදි නම් නොකර තර්ක ලිවිය හැකිය:

ES5 සහ ඊට වැඩි

function foo() {
    a = typeof arguments[0] !== 'undefined' ? a : 42;
    b = typeof arguments[1] !== 'undefined' ? b : 'default_b';
    ...
}

ES6 සහ ඊට වැඩි

function foo(...rest) {
    a = typeof rest[0] !== 'undefined' ? a : 42;
    b = typeof rest[1] !== 'undefined' ? b : 'default_b';
    ...
}

0
def read_file(file, delete_after = false)
  # code
end

ECMAScript 6 (ES6) මෙන්ම පෙර සංස්කරණ ද ඇතුළුව පහත දැක්වෙන කේතය මෙම තත්වය තුළ ක්‍රියා කළ හැකිය.

function read_file(file, delete_after) {
    if(delete_after == undefined)
        delete_after = false;//default value

    console.log('delete_after =',delete_after);
}
read_file('text1.txt',true);
read_file('text2.txt');

ඇමතීමේදී ශ්‍රිතයේ පරාමිති අගය මඟ හැරුණු විට භාෂාවල පෙරනිමි අගය ක්‍රියාත්මක වන බැවින්, ජාවාස්ක්‍රිප්ට් හි එය නිර්වචනය කර නොමැත . මෙම ප්‍රවේශය ක්‍රමලේඛිකව ආකර්ශනීය නොවන නමුත් පසුගාමී අනුකූලතාවයක් ඇත.


0

ඔව් මෙය පෙරනිමි පරාමිතියක් ලෙස හැඳින්වේ

පෙරනිමි ශ්‍රිත පරාමිතීන් කිසිදු අගයක් හෝ නිර්වචනය කර නොමැති නම් විධිමත් පරාමිතීන් පෙරනිමි අගයන් සමඟ ආරම්භ කිරීමට ඉඩ දෙයි.

වාක්‍ය ඛණ්ඩය:

function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
   statements
}

විස්තර:

ශ්‍රිතවල පරාමිතීන් පෙරනිමියෙන් නිර්වචනය කර නැත කෙසේ වෙතත්, අවස්ථා වලදී වෙනස් පෙරනිමි අගයක් සැකසීම ප්‍රයෝජනවත් විය හැකිය. පෙරනිමි පරාමිතීන් උදව් කළ හැකි ස්ථානය මෙයයි.

අතීතයේ දී, පෙරනිමි සැකසීමේ පොදු උපාය වූයේ ශ්‍රිතයේ ශරීරයේ පරාමිති අගයන් පරීක්ෂා කිරීම සහ ඒවා නිර්වචනය නොකළහොත් අගයක් පැවරීමයි. ඇමතුමේ කිසිදු අගයක් සපයා නොමැති නම්, එහි වටිනාකම නිර්වචනය නොකෙරේ. පරාමිතිය නිර්වචනය කර නොමැති බව තහවුරු කර ගැනීම සඳහා ඔබට කොන්දේසි සහිත චෙක්පතක් සැකසීමට සිදුවේ

ES2015 හි පෙරනිමි පරාමිතීන් සමඟ, ක්‍රියාකාරී ශරීරයේ චෙක්පත තවදුරටත් අවශ්‍ය නොවේ. දැන් ඔබට ශ්‍රිත ශීර්ෂය තුළ පෙරනිමි අගයක් තැබිය හැකිය.

වෙනස්කම් සඳහා උදාහරණය:

// OLD METHOD
function multiply(a, b) {
  b = (typeof b !== 'undefined') ?  b : 1;
  return a * b;
}

multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5);    // 5


// NEW METHOD
function multiply(a, b = 1) {
  return a * b;
}

multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5);    // 5

විවිධ සින්ටැක්ස් උදාහරණ:

වෙනත් ව්‍යාජ අගයන්ට එරෙහිව නිර්වචනය නොකළ පැඩින් කිරීම:

ඇමතීමේදී අගය පැහැදිලිවම සකසා තිබුණද, සංඛ්‍යා තර්කයේ අගය පෙරනිමිය වේ.

function test(num = 1) {
  console.log(typeof num);
}

test();          // 'number' (num is set to 1)
test(undefined); // 'number' (num is set to 1 too)

// test with other falsy values:
test('');        // 'string' (num is set to '')
test(null);      // 'object' (num is set to null)

ඇමතුම් වේලාවේදී ඇගයීම:

පෙරනිමි තර්කය ඇමතුම් වේලාවේදී ඇගයීමට ලක් වේ, එබැවින් වෙනත් භාෂා මෙන් නොව, ශ්‍රිතය හැඳින්වෙන සෑම අවස්ථාවකම නව වස්තුවක් නිර්මාණය වේ.

function append(value, array = []) {
  array.push(value);
  return array;
}

append(1); //[1]
append(2); //[2], not [1, 2]


// This even applies to functions and variables
function callSomething(thing = something()) {
 return thing;
}

function something() {
  return 'sth';
}

callSomething();  //sth

පෙරනිමි පරාමිතීන් පසුකාලීන පෙරනිමි පරාමිතීන් සඳහා ලබා ගත හැකිය:

දැනටමත් හමු වී ඇති පරාමිතීන් පසුකාලීන පෙරනිමි පරාමිතීන් සඳහා ලබා ගත හැකිය

function singularAutoPlural(singular, plural = singular + 's',
                        rallyingCry = plural + ' ATTACK!!!') {
  return [singular, plural, rallyingCry];
}

//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural('Gecko');

//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural('Fox', 'Foxes');

//["Deer", "Deer", "Deer ... change."]
singularAutoPlural('Deer', 'Deer', 'Deer peaceably and respectfully \ petition the government for positive change.')

ක්‍රියාකාරී ශරීරය තුළ අර්ථ දක්වා ඇති කාර්යයන්:

හූනන් 33 හි හඳුන්වා දී ඇත (ෆයර්ෆොක්ස් 33 / තණ්ඩර්බර්ඩ් 33 / සීමොන්කි 2.30). ශ්‍රිත ශරීරයේ ප්‍රකාශිත කාර්යයන් පෙරනිමි පරාමිතීන් තුළ සඳහන් කළ නොහැකි අතර විමර්ශන දෝෂයක් විසි කරන්න (දැනට ස්පයිඩර් මොන්කි හි ටයිප් එර්රර්, දෝෂ 1022967 බලන්න). පෙරනිමි පරාමිතීන් සෑම විටම පළමුව ක්‍රියාත්මක කරනු ලැබේ, ශ්‍රිත ශරීරය තුළ ක්‍රියාකාරී ප්‍රකාශන පසුව ඇගයීමට ලක් කරයි.

// Doesn't work! Throws ReferenceError.
function f(a = go()) {
  function go() { return ':P'; }
}

පෙරනිමි පරාමිතීන් පසු පෙරනිමි රහිත පරාමිතීන්:

හූනන් 26 ට පෙර (ෆයර්ෆොක්ස් 26 / තණ්ඩර්බර්ඩ් 26 / සීමොන්කි 2.23 / ෆයර්ෆොක්ස් ඕඑස් 1.2), පහත කේතය සින්ටැක්ස් දෝෂයක් ඇති කිරීමට හේතු විය. මෙය දෝෂ 777060 හි සවි කර ඇති අතර පසුකාලීන අනුවාද වල අපේක්ෂිත පරිදි ක්‍රියා කරයි. පරාමිතීන් තවමත් වමේ සිට දකුණට සකසා ඇති අතර පෙරනිමි පරාමිතීන් පෙරනිමියෙන් තොරව වුවද නැවත ලියයි.

function f(x = 1, y) {
  return [x, y];
}

f(); // [1, undefined]
f(2); // [2, undefined]

පෙරනිමි අගය පැවරීම සහිත විනාශ වූ පරාමිතිය:

විනාශකාරී පැවරුම් අංකනය සමඟ ඔබට පෙරනිමි අගය පැවරුම භාවිතා කළ හැකිය

function f([x, y] = [1, 2], {z: z} = {z: 3}) {
  return x + y + z;
}

f(); // 6

0

පෙරනිමි පරාමිතීන් සැකසීමට වෙනස් ප්‍රවේශයක් වන්නේ සෘජුවම තර්ක වෙනුවට තර්ක වල වස්තු සිතියම භාවිතා කිරීමයි. උදාහරණයක් වශයෙන්,

const defaultConfig = {
 category: 'Animals',
 legs: 4
};

function checkOrganism(props) {
 const category = props.category || defaultConfig.category;
 const legs = props.legs || defaultConfig.legs;
}

මේ ආකාරයෙන්, තර්ක විස්තාරණය කිරීම පහසු වන අතර තර්ක දිග නොගැලපීම ගැන කරදර නොවන්න.


-1

පිළිතුර ඔව්. ඇත්ත වශයෙන්ම, පෙරනිමි පරාමිතීන් සඳහා සහය දක්වන බොහෝ භාෂා ඇත. පයිතන් ඒවායින් එකකි:

def(a, enter="Hello"):
   print(a+enter)

වරහන් නිසා මෙය පයිතන් 3 කේතය වුවද, ශ්‍රිතවල පෙරනිමි පරාමිතීන් JS හි ද ක්‍රියා කරයි.

උදාහරණයක් ලෙස, සහ ඔබේ නඩුවේදී:

function read_file(file, deleteAfter=false){
  console.log(deleteAfter);
}

read_file("test.txt");

නමුත් සමහර විට ඔබට පෙරනිමි පරාමිතීන් අවශ්‍ය නොවේ.

ශ්‍රිතය ආරම්භ වූ වහාම ඔබට විචල්‍යය අර්ථ දැක්විය හැකිය, මේ ආකාරයට:

function read_file(file){
  var deleteAfter = false;
  console.log(deleteAfter);
}

read_file("test.txt");

මගේ උදාහරණ දෙකෙහිම, එය එකම දේ ලබා දෙයි. නමුත් සමහර විට ඒවා ඇත්ත වශයෙන්ම ප්‍රයෝජනවත් විය හැකිය.

එබැවින්, අවසාන වශයෙන්, පෙරනිමි පරාමිති අගයන් JS හි භාවිතා කළ හැකිය. නමුත් එය ශ්‍රිතය ආරම්භ වූ වහාම විචල්‍යයක් නිර්වචනය කිරීම හා සමාන වේ. කෙසේ වෙතත්, සමහර විට ඒවා තවමත් ඉතා ප්රයෝජනවත් වේ. ඔබ දැක ඇති පරිදි, පෙරනිමි පරාමිති අගයන් ශ්‍රිතය ආරම්භ වූ වහාම පරාමිතිය නිර්වචනය කරන සම්මත ක්‍රමයට වඩා 1 අඩු කේත රේඛාවක් ගනී.

සංස්කරණය කරන්න: මෙය ඉතා වැදගත් වේ! මෙයIE හි ක්‍රියා නොකරනු ඇත. ප්‍රලේඛනය බලන්න. එබැවින් IE සමඟ ඔබ "ශ්‍රිතයට ඉහළින් විචල්‍යය නිර්වචනය කරන්න" ක්‍රමය භාවිතා කළ යුතුය. පෙරනිමි පරාමිතීන් IE හි ක්‍රියා නොකරනු ඇත.


-3

ඔව්, මෙය ජාවාස්ක්‍රිප්ට් හි ක්‍රියාත්මක වේ. ඔබට එය ද කළ හැකිය:

function func(a=10,b=20)
{
    alert (a+' and '+b);
}

func(); // Result: 10 and 20

func(12); // Result: 12 and 20

func(22,25); // Result: 22 and 25

2
එය දැනට අතේ ගෙන යා නොහැක ... IE ... developper.mozilla.org/en/docs/Web/JavaScript/Reference/… (තවද එය අනුපිටපත් පිළිතුරකි ...)
ගර්ට් වැන් ඩෙන් බර්ග්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.