etc./StackOverFlow

JavaScript 함수에 대한 기본 매개변수 값 설정

청렴결백한 만능 재주꾼 2021. 11. 23. 03:44
반응형

질문자 :Tilendor


JavaScript 함수에 기본값을 설정한 선택적 인수가 있고 값이 정의되지 않은 경우 사용되며 값이 전달되면 무시됩니다. Ruby에서는 다음과 같이 할 수 있습니다.

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

JavaScript에서 작동합니까?

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


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 이전 ,

여러 가지 방법이 있지만 이것이 내가 선호하는 방법입니다. false 또는 null을 포함하여 원하는 모든 것을 전달할 수 있습니다. ( typeof null == "object" )

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

Tom Ritter

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

이 양수인의 정보는 다음의 제품에 delete_after 의 값 delete_after 그것이 falsey 값이 그렇지 않으면 문자열 지정하지 않은 경우 "my default here" . 자세한 내용은 Doug Crockford의 언어 설문 조사 및 연산자 섹션을 확인하십시오 .

false , null , undefined , 0 또는 "" 와 같은 잘못된 값을 전달하려는 경우 이 접근 방식이 작동하지 않습니다. 잘못된 값을 전달해야 하는 경우 Tom 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" });

Russ Cam

나는 개인적으로 훨씬 더 간결하고 읽기 쉬운 이와 같은 간단한 것을 찾습니다.

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

TJ L

ECMAScript 6에서는 실제로 가지고 있는 것을 정확히 작성할 수 있습니다.

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

이것은 존재하지 않거나 undefined delete_afterfalse 설정합니다. 오늘날 Babel 과 같은 트랜스파일러와 함께 이와 같은 ES6 기능을 사용할 수 있습니다.

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


Felix Kling

기본 매개변수 값

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으로 직접 전달되지 않고 11이 됩니다. 이 문제를 해결하기 위해 일부 사람들은 대신 다음과 같이 수표를 더 장황하게 작성합니다.

 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과 같은 단순한 값 이상일 수 있습니다. 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

Thalaivar

그 솔루션은 js에서 저에게 효과적입니다.

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

Takács Zsolt

자바스크립트에서 기본 매개변수 값을 사용할 때 각별히 주의할 것을 적극 권장합니다. forEach , mapreduce 와 같은 고차 함수와 함께 사용하면 종종 버그가 생성됩니다. 예를 들어 다음 코드 행을 고려하십시오.

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

parseInt에는 선택적 두 번째 매개변수 function parseInt(s, [ radix =10]) 있지만 map은 3개의 인수( element , indexarray )를 사용 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);

위의 스니펫을 실행하면 사용하지 않는 매개변수에 대한 기본 인수 값 뒤에 숨어 있는 위험을 알 수 있습니다.


Doug Coburn

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

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

Martin Wantke

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

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

참조 - http://es6-features.org/#DefaultParameterValues


zillaofthegods

오랫동안 C++ 개발자(웹 개발에 신인)였기 때문에 이 상황을 처음 접했을 때 질문에 언급된 것처럼 함수 정의에서 매개변수 할당을 다음과 같이 했습니다.

 function myfunc(a,b=10)

그러나 브라우저 간에 일관되게 작동하지 않는다는 점에 유의하십시오. 저에게는 데스크탑의 크롬에서 작동했지만 안드로이드의 크롬에서는 작동하지 않았습니다. 많은 사람들이 위에서 언급했듯이 더 안전한 옵션은 -

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

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


vivek

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일 현재 이것은 여전히 문제입니다


Steven Johnston

구문에 따라

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

형식 매개변수의 기본값을 정의할 수 있습니다. 또한 typeof 함수를 사용하여 정의되지 않은 값을 확인합니다.


Sachin Kumar

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

Tính Ngô Quang

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 라고 합니다. 값이 없거나 정의되지 않은 경우 형식 매개변수를 기본값으로 초기화할 수 있습니다. 참고 : 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 않는다는 사실에 의존하기 때문에 정확히 동일한 동작을 합니다.


BlackBeard

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 로 변환될 수 있는 경우 항상 첫 번째 값을 반환하고 그렇지 않은 경우 오른쪽 값을 반환합니다. 함수가 해당 인수 없이 호출되면 매개변수 변수(이 예에서는 bar )가 JS 엔진에 의해 undefined undefined 그런 다음 false로 변환되어 OR 연산자가 값 0을 반환합니다.


Willem van der Veen

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


ES5: 0 , nullundefined 와 같은 잘못된 값을 함수에 전달해야 할 수 있는 경우가 있기 때문에 주어진 답변의 대부분은 저에게 충분하지 않습니다. 매개변수가 정의되지 않았는지 확인하려면 정의되지 않았기 때문에 정의되지 않은 대신 전달한 값이므로 다음을 수행합니다.

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

Angel Politis

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

여기서 foo()는 argValue라는 매개변수가 있는 함수입니다. 여기에서 함수 호출에서 아무 것도 전달하지 않으면 throwIfNoValue() 함수가 호출되고 반환된 결과는 유일한 인수 argValue에 할당됩니다. 이것이 함수 호출을 기본 매개변수로 사용할 수 있는 방법입니다. 코드를 더 단순화하고 읽기 쉽게 만듭니다.

이 예제는 여기에서 가져왔습니다.


dutta

예, 기본 매개변수를 사용하는 것은 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는 다음과 같은 경우에만 대체됩니다. 전달된 값은 사실입니다. 그 이유는 || 일하고있는...


Alireza

어떤 이유로 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 , null 또는 정의되지 않은 경우 기본값을 설정합니다.


Akrion

미래의 소리

미래에는 하나의 개체를 다른 개체로 "확산"할 수 있습니다(현재 2019년 현재 Edge에서는 지원하지 않습니다 !) - 순서에 관계없이 멋진 기본 옵션에 이를 사용하는 방법을 보여줍니다.

 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/Spread_syntax

... 한편 Edge가 지원하는 것은 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 }

jave.web

제 실력도 보여드리기 위해(웃음), 위의 함수는 아래와 같이 명명된 인수 없이도 작성할 수 있습니다.

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'; ... }

Shivang Gupta

예, 이것은 기본 매개변수라고 합니다.

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

통사론:

 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

다른 구문 예:

정의되지 않은 값과 다른 거짓 값 채우기:

호출 시 값을 명시적으로 설정하더라도 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 참조). 기본 매개변수는 항상 먼저 실행되고, 함수 본문 내부의 함수 선언은 나중에 평가됩니다.

 // 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]

기본값이 할당된 비구조화된 매개변수:

Destructuring 할당 표기법과 함께 기본값 할당을 사용할 수 있습니다.

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

esewalson

기본 매개변수를 사용하는 것이 다른 브라우저로 이식될 수 없다는 몇 가지 답변을 보았지만 Babel과 같은 변환기를 사용하여 최신 JS에 대한 지원이 제한적인 브라우저에서 코드를 ES5 구문으로 변환할 수 있다는 점을 지적하는 것이 타당합니다. 특징.

그래서 이거:

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

다음과 같이 트랜스파일됩니다(Babel REPL -> https://babeljs.io/repl/ 에서 사용해 보세요).

 "use strict"; function read_file(file) { var delete_after = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; //Code... }

물론 트랜스파일을 사용할 생각이 없다면 다른 사람들이 시연한 것처럼 함수 본문에 기본 매개변수를 설정하는 것도 완벽합니다.


maxxioso

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에서는 undefined 에 할당됩니다. 이 접근 방식은 프로그래밍 방식으로 매력적으로 보이지 않지만 이전 버전과의 호환성이 있습니다.


Muhammad Rizwan

기본 매개변수를 설정하는 다른 접근 방식은 직접 인수 대신 인수의 객체 맵을 사용하는 것입니다. 예를 들어,

 const defaultConfig = { category: 'Animals', legs: 4 }; function checkOrganism(props) { const category = props.category || defaultConfig.category; const legs = props.legs || defaultConfig.legs; }

이렇게 하면 인수를 확장하기 쉽고 인수 길이 불일치에 대해 걱정할 필요가 없습니다.


Aman Pandey

예 - 증거:

 function read_file(file, delete_after = false) { // Code console.log({file,delete_after}); } // TEST read_file("A"); read_file("B",true); read_file("C",false);


Kamil Kiełczewski

export const getfilesize = (bytes, decimals = 2) => { if (bytes === 0){ return '0 Bytes'; }else{ const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } }

Aftab Amin

대답은 예입니다. 사실, 기본 매개변수를 지원하는 많은 언어가 있습니다. 파이썬은 그 중 하나입니다:

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

괄호로 인해 Python 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에서 작동하지 않습니다.


new QOpenGLWidget

예, 이것은 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

Muhammad Awais

출처 : http:www.stackoverflow.com/questions/894860/set-a-default-parameter-value-for-a-javascript-function

반응형