점점 더 함수가 선언되는 것을보고 있습니다.
var foo = function() {
// things
};
내가 배운 방법 대신에
function foo() {
// things
}
차이점이 뭐야? 더 나은 성능? 범위? 이 방법을 사용해야합니까?
점점 더 함수가 선언되는 것을보고 있습니다.
var foo = function() {
// things
};
내가 배운 방법 대신에
function foo() {
// things
}
차이점이 뭐야? 더 나은 성능? 범위? 이 방법을 사용해야합니까?
답변:
var foo = function() {}
익명 함수를 참조하는 변수를 정의합니다.
function foo() {}
명명 된 함수를 정의합니다 foo
.
함수 매개 변수로 이름으로 전달 될 수 있으며 의도 된 용도가 OOP에 사용되는 경우 인스턴스화 될 수 있습니다.
하루가 끝날 때, 어느 것이 사용 하는가는 특정 유스 케이스에 크게 좌우됩니다 (자바 스크립트는 그와 같이 재미 있습니다;)). 전자를 사용 하게 되면 함수의 이름을 지정하는 것이 좋습니다.
var foo = function MY_function() {}
. 이 명명 규칙은 디버거 콜 스택이 쓸모 없도록 도와줍니다.
foo
되고 함수가 호출됩니다MY_function
함수 표현 :
//someFunction(); //wouldn't work when uncommented
var someFunction = function(){ alert('yay'); };
이 경우 func 표현식은 익명이지만 참조를 위해 var에 할당됩니다. 이것은 다음과 같은 방식으로 레이블이 지정된 함수 명령문과 다릅니다.
new someFunction().constructor.name === 'someFunction';//false
함수에 대한 참조가 var에 할당되었지만 함수가 아닌 var가 var 이름에 연결되어 있기 때문에 인스턴스는 constructor.name에 대한 var 이름을 가져 오지 않습니다.레이블이 지정된 함수 명령문에서 :
//someFunction(); //works when uncommented
function someFunction(){ alert('yay'); }
new someFunction().constructor.name === 'someFunction'; //true
이름은 함수에 직접 연결됩니다.일반적으로 말해서 상황이 바뀌거나 한 줄로 메소드를 정의 / 할당하는 경우 호출이 실패하지 않는 한 var에 표현식을 수행해야 할 큰 이유는 없습니다. 실제로 맨 아래에 내부 func 및 메서드 정의를 사용하여 객체를 구성하는 데 유용한 호이 스팅이 발견되어 객체의 실제 동작에 도달하고 한 줄의 공용 메서드 정의 ( this.
동일한 이름으로 func를 할당하여 )를 한 번에 수행 할 수 있습니다. 쉽게 참조 할 수있는 지점. 생성자 IMO에 대해 레이블이 지정된 명령문을 항상 사용해야하므로 생성자를 통해 오브젝트의 '유형'을 식별 할 수 있습니다.
첫 번째 예제는 표현식 이고 두 번째 예제는 명령문 입니다. 함수를 표현식으로 정의하면 정의가 발생할 수있는 위치, 할당 할 수있는 항목, 매개 변수로 전달할 수있는 등의 유연성이 향상됩니다.
예를 들면 다음과 같습니다.
SomeThing('abc', function(a,b) {return a*b;});
대 ...
function tmp(a,b) {
return a*b;
}
SomeThing('abc', tmp);
더 복잡한 예제는 함수 표현식 구문 없이는 매우 복잡합니다.
https://stackoverflow.com/questions/111102/how-do-javascript-closures-work를 보십시오
실질적인 차이점은 게양입니다. 예를 들면 다음과 같습니다.
foo(); // alerts 'hello'
function foo() {alert('hello');}
vs
foo(); // throws an error since foo is undefined
var foo = function() {alert('hello');}
또한 이것은 정의되지 않은 동작입니다.
function foo(){
if (true) {
function bar(){}
}
bar();
}
괜찮습니다.
function foo(){
if (true) {
var bar = function(){}
}
bar();
}
if
명령문 내에서 함수 정의에 아무런 문제가 없습니다 !