2014-02-10 3 views
0

자바 스크립트 용 MDN (Mozilla Developer Network) 튜토리얼에서이 코드 스 니펫을 발견했습니다 (멋진 독서). 나에게 흥미 무엇 MDN JavaScript Re-introductionJavaScript의 속성과 같은 함수를 호출합니까?

function personFullName() { 
    return this.first + ' ' + this.last; 
} 
function personFullNameReversed() { 
    return this.last + ', ' + this.first; 
} 
function Person(first, last) { 
    this.first = first; 
    this.last = last; 
    this.fullName = personFullName; 
    this.fullNameReversed = personFullNameReversed; 
} 

함수가 호출되는 방법입니다. 전형적인(); Person 함수에서 함수를 호출하는 데 사용되지 않습니다. 인격 기능 내에서, 우리는 볼 :의 'personFullName가'변수 나보다는 재산처럼 사용

this.fullName = personFullName; 

여기

this.fullName = personFullName(); 

대신에 사용된다 무엇을 진정하는 기능. 누군가가 왜 이렇게 빛을 발할 수 있었습니까?

+2

함수가 호출되지 않기 때문입니다. 어떤 함수에'alert ('foo')'를 넣으면 나타나지 않는다. – zerkms

+1

변수가 * 변수이기 때문에 변수처럼 사용된다. 함수 객체를 참조하는 변수입니다. 함수는 다른 객체와 마찬가지로 변수 및 속성에 할당 할 수있는 객체입니다. –

답변

1

Person 함수를 실행할 때 함수가 호출되지 않고 참조 만 전달됩니다.


자바 스크립트 기능이 다른 모든 것들과 같은 오브젝트 것을 의미 일류 시민 등의 기능을 가지고있다 : 그들은 특성을 가질 수 있습니다, 그들은 변수에 저장할 수 있습니다, 그들은 등 매개 변수

로 전달 될 수있다

function isEven(item) { 
return item % 2 == 0; 
} 

alert([1, 2, 3, 4, 5, 6].filter(isEven)); 

Demo

:

이것은 이것 좀 봐, 정말 표현 코드 가능 3230

먼저 함수를 만들고 isEven이라는 변수에 저장 한 다음 함수를 Array.filter으로 전달합니다.이 경우 모든 요소를 ​​해당 배열로 전달하고 isEven이 반환 된 true 인 요소 만 포함하는 배열을 반환합니다.

+1

나는 이것을 얻었다. 여전히 의심스러운 사람은 다음 [JSFiddle] (http://jsfiddle.net/XE48Q/)에서 차이점을 이해하십시오. 감사!! –

1

JavaScript는 함수형 언어이며 함수는 1 급 값입니다. 그것들은 단지 객체 일 뿐이며 다른 객체와 마찬가지로 사용자 정의 속성을 보유 할 수 있습니다. 그리고 그것들에 대한 참조는 자유롭게 통과 할 수 있습니다. cool stuff을 많이 허용합니다 (나중에 배우 겠지만).

그래서 함수는 실제로 호출되지 않고, 변수를 보유하는 변수를 통해 참조되며 인스턴스 (this)의 속성으로 지정됩니다. 이들은 이제 각 인스턴스 방법이라 할 수있는 개체 (makePerson)를 사용하는 제 1 실시 예에

등 :

var s = new Person("Simon", "Willison"); 
s.fullName(); // Simon Willison 

첨부 텍스트는 물론 설명 :

person 객체를 만들 때마다 새로운 두 개의 새로운 함수 객체가 만들어집니다.이 코드가 인 경우 더 좋지 않습니까?

[이제 코드를 인용했습니다.] 더 나은 방법 : 함수를 한 번만 생성하고 생성자 내에서 해당 함수에 대한 참조를 지정합니다.

관련 문제