2017-12-14 14 views
6

는 참조 오류 던져 같은 이름의 변수를 사용하여 기본값을 할당 :변수의 JS 기본 인수 값 : 식별자가 다른 이유는 무엇입니까?

var a = 'adef'; 
var x = (a=a) => console.log(a); 
x(); 
=> "ReferenceError: a is not defined" 

을하지만이 괜찮 :

var other = 'otherdef'; 
var x = (a=other) => console.log(a); 
x(); 
=> "otherdef" 

내 가정이였습니다 외부 범위 a의 값 것 새로운 범위에 할당 (크롬 63 노드 6 시험)

I는 const 대신 var의 사용 시도

, 대신 화살 기능 class/function 있지만, 결과는 항상 동일하다.

내가 가지고 ... 문제가 a가 할당하는 동안 '게양'하고 그래서 할당이 (존재하지만 정의되지 않은) 새로운 'A'로 언급하고 있다는 점이다

+0

예, [매개 변수 범위] (https://stackoverflow.com/q/44896829/1048572)의 'a'는 실제로 [hoisted] (https://stackoverflow.com/q/31219420/1048572)입니다. – Bergi

답변

0

이 동작의 목적을 느낌

var a = 2; 
var x = (a, b = a) => console.log(a, b); 
x(42); // 42 42 

는 특별한 경우 a = a 다르게 작동 할 수 만들기하지만이 어렵게이 사용하는 함수를 리팩토링 할 것 : 매개 변수가 예를 들어, 다른 매개 변수의 값을 기본값으로 초기화 할 수 있도록하는 것입니다 행동 (당신은 매개 변수 a도 의존하고있는 변수의 이름을 바꾸지 않아야합니다.