javascript - 파라미터 - 자바스크립트 함수 인자 기본값




JavaScript 함수의 기본 매개 변수 값 설정 (14)

자바 스크립트 함수에 값을 정의하지 않은 경우 사용되는 기본 값을 설정하는 선택적 인수가 필요합니다. 루비에서는 다음과 같이 할 수 있습니다 :

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

이 JavaScript에서 작동합니까?

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

C ++ 개발자 (루키와 웹 개발 :)), 내가 처음이 상황을 보았을 때, 나는 함수 정의에서 매개 변수 할당을했는데, 다음과 같이 질문에서 언급했다.

function myfunc(a,b=10)

그러나 브라우저간에 일관되게 작동하지는 않습니다. 내 데스크톱에서는 크롬에서 작동했지만 안드로이드에서는 크롬에서 작동하지 않았다. 위에서 언급 한 많은 옵션이 더 안전한 옵션입니다.

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

이 대답에 대한 의도는 다른 솔루션에서 이미 언급 한 것과 같은 솔루션을 반복하는 것이 아니라 함수 정의의 매개 변수 지정이 일부 브라우저에서 작동하지만이를 사용하지 않는다는 것을 알리기위한 것입니다.


ECMAScript 6에서는 실제로 가지고있는 것을 정확하게 쓸 수 있습니다 :

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

delete_after 가 없거나 undefined 경우 false 설정합니다. 오늘날 Babel 과 같은 증발기와 함께이 같은 ES6 기능을 사용할 수 있습니다.

자세한 내용은 MDN 문서를 참조하십시오 .


Microsoft Edge에서 코드 작업을 수행하는 데 관심이있는 사용자는 함수 매개 변수에서 기본값을 사용하지 마십시오.

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

이 예제에서 Edge는 "Expecting"오류를 던집니다. ""

이 사용을 피하려면

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

2016 년 8 월 8 일자로 이것은 여전히 ​​문제입니다.


undefined와 명시 적 비교를 사용하십시오.

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

그래, 이걸 기본 매개 변수라고 부릅니다.

기본 함수 매개 변수를 사용하면 값이 없거나 정의되지 않은 경우 형식 매개 변수를 기본값으로 초기화 할 수 있습니다.

통사론:

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

다른 구문 예제 :

패딩 undefined vs 다른 위증 가치 :

호출 할 때 값이 명시 적으로 설정 되더라도 num 인수의 값이 기본값입니다.

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.')

함수 본문 내에 정의 된 함수 :

Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30)에서 소개되었습니다. 함수 본문에 선언 된 함수는 기본 매개 변수 내에서 참조 할 수 없으며 ReferenceError (현재 SpiderMonkey의 TypeError, 버그 1022967 참조)를 throw합니다. 기본 매개 변수는 항상 먼저 실행되고 함수 본문의 함수 선언은 나중에 계산됩니다.

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

기본 매개 변수 다음에 기본값이없는 매개 변수 :

Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2) 이전에는 다음 코드로 인해 SyntaxError가 발생했습니다. 이 버그는 버그 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

나는 이것을 훨씬 더 간결하고 읽기 쉽도록 단순하게 발견한다.

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

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

업데이트로 ... ECMAScript 6을 사용하면 함수 매개 변수 선언에서 기본값을 다음과 같이 설정할 수 있습니다.

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

f(1) === 50

에 의해 참조 된 - http://es6-features.org/#DefaultParameterValues


예, 이것은 Javascript에서 작동합니다. 다음과 같이 할 수도 있습니다.

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

저 해결책은 js 안에 저를 위해 일한다 :

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

최신 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 라고 default function parameters . 값 또는 정의되지 않은 값이 전달되지 않으면 형식 매개 변수를 기본값으로 초기화 할 수 있습니다. 참고 : Internet Explorer 또는 이전 브라우저에서는 작동하지 않습니다.

최대한의 호환성을 위해 다음을 사용하십시오.

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 않으면 매개 변수 변수가 undefined 않는다는 사실에 의존합니다.


ES6 : 이미 대부분의 답변에서 언급했듯이 ES6에서는 값과 함께 매개 변수를 간단히 초기화 할 수 있습니다.

ES5 : 0 , nullundefined 와 같은 잘못된 값을 함수에 전달해야하는 경우가 있기 때문에 주어진 답의 대부분은 저에게 충분하지 않습니다. 매개 변수가 정의되지 않았는지 결정하기 위해 정의되지 않았기 때문에 전달 된 값입니다.

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

기본 매개 변수 값

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 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 = 11x !== undefined ? x : 11 와 비슷합니다 x !== undefined ? x : 11 x !== undefined ? x : 11 보다 훨씬 일반적인 관용구 x || 11 x || 11

기본 값 식

Function 기본값은 31과 같은 단순한 값 이상일 수 있습니다. 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) Immediately Invoked Function Expression (IIFE) .

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

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');

언어에서 기본값은 호출 할 때 함수의 매개 변수 값을 건너 뛸 때 작동합니다. JavaScript에서는 정의되지 않은 값으로 지정됩니다. 이 방법은 프로그래밍 방식으로는 매력적이지 않지만 이전 버전과의 호환성은 있습니다.


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!!!




default-parameters