Evet, bu varsayılan parametre olarak adlandırılır
Varsayılan fonksiyon parametreleri, herhangi bir değer veya tanımlanmamışsa resmi parametrelerin varsayılan değerlerle başlatılmasına izin verir.
Sözdizimi:
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Açıklama:
Varsayılan olarak tanımlanmamış işlevlerin parametreleri Ancak, farklı bir varsayılan değer ayarlamak yararlı olabilir. Bu, varsayılan parametrelerin yardımcı olabileceği yerdir.
Geçmişte, varsayılanları ayarlamak için genel strateji, işlevin gövdesinde parametre değerlerini sınamak ve tanımlanmamışlarsa bir değer atamaktı. Çağrıda hiçbir değer sağlanmazsa, değeri tanımsız olur. Parametrenin tanımsız olmadığından emin olmak için bir koşullu denetim ayarlamanız gerekir
ES2015'teki varsayılan parametrelerle, işlev gövdesindeki kontrol artık gerekli değildir. Artık işlev kafasına varsayılan bir değer koyabilirsiniz.
Farklılıklara örnek:
// 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
Farklı Sözdizimi Örnekleri:
Dolgu tanımsız ve diğer yanlış değerler:
Arama sırasında değer açıkça ayarlanmış olsa bile, num bağımsız değişkeninin değeri varsayılan değerdir.
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)
Çağrı zamanında değerlendirme:
Varsayılan argüman çağrı zamanında değerlendirilir, bu nedenle diğer bazı dillerden farklı olarak, işlev her çağrıldığında yeni bir nesne oluşturulur.
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
Varsayılan parametreler daha sonraki varsayılan parametreler için kullanılabilir:
Karşılaşılan parametreler daha sonraki varsayılan parametreler için kullanılabilir
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.')
İşlev gövdesi içinde tanımlanan işlevler:
Gecko 33'te (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30) tanıtıldı. İşlev gövdesinde bildirilen işlevler varsayılan parametreler içinde gönderilemez ve ReferenceError atar (şu anda SpiderMonkey'de bir TypeError, bkz. Hata 1022967). Varsayılan parametreler her zaman önce yürütülür, işlev gövdesi içindeki işlev bildirimleri daha sonra değerlendirilir.
// Doesn't work! Throws ReferenceError.
function f(a = go()) {
function go() { return ':P'; }
}
Varsayılan parametrelerden sonra varsayılanları olmayan parametreler:
Gecko 26'dan (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2) önce, aşağıdaki kod bir SyntaxError ile sonuçlandı. Bu hata 777060 ile giderilmiştir ve sonraki sürümlerde beklendiği gibi çalışır. Parametreler yine de soldan sağa ayarlanmıştır, varsayılan olmayan daha sonraki parametreler olsa bile varsayılan parametrelerin üzerine yazılır.
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
Varsayılan değer ataması ile tahrip edilen paramet:
Varsayılan değer atamasını, yıkıcı atama gösterimi ile kullanabilirsiniz
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6
function defaultFor(arg, val) { return typeof arg !== 'undefined' ? arg : val; }
ve sonra şöyle diyebilirsiniza = defaultFor(a, 42);