2016-09-16 2 views
0

JavaScript (ECMAScript 5)에서 함수는 가치가 있습니다 ("최상급 함수"라고합니다).함수 값이란 정확히 무엇입니까?

이렇게하면 표현식으로 사용할 수 있습니다 (표현식은 값을 생성하고 다른 표현식을 포함 할 수 있습니다 : var exp0 = (exp1) + exp2 - exp3.function();은 문법에 맞는 구문입니다).

위 코드에는 exp0, exp1, (exp1), exp2, (exp1) + exp2, exp3, exp3.function() 및 (exp1) + exp2-exp3.function()의 8 가지 표현식이 있습니다. 함수 식으로 사용될 수


때문에, 다음 코드 올 :

var my_function_0 = function a() {} 명명 함수식이다.

다음 코드

또한 올바른 :

var my_function_1 = function() {}`익명 함수의 표현이다.

두 값 모두 값이며 둘 다 값입니다.


지금, 아래의 코드를 고려해

function requiredIdentifier() {}

그것은 아닙니다 "라는 이름 또는 익명 함수 표현식"하지만, 함수 선언.


내 질문은 :

는 선언 된 기능 /이 값을 생성합니까?

이 질문은 다음과 같습니다.선언 된 함수는 표현식입니까? (이 명명 된 또는 익명 함수 표현식 아닌 경우에도?!)

+1

[JavaScript에서 함수 식과 선언의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/1013385/what-is-the-difference-between-a-function-expression- vs-declaration-in-javascrip) –

+0

예 값은 오브젝트의 이름으로 지정됩니다. – Redu

+1

선언 한 후'var someVar = requiredIdentifier'를 실행 한 다음'someVar'가 정의되지 않았는지 테스트하십시오. 함수 객체의 값을가집니다. – charlietfl

답변

4

선언 된 함수에 값이 있습니까/생성합니까?

예. 관계없이 함수를 생성하는데 사용되는 어떤 구문 함수는 호출 대상 (즉 그것이 호출 가능하게하는 내부 인터페이스를 구현)이다 변수 a, bc

function a() {} 
var b = function() {} 
var c = (new Function()) // or some other expression that returns a function 

모든

함수 값을 보유.

구문의 차이는 값이 만들어 질 때와 변수에 바인딩 될 때/때입니다. 자세한 내용은 var functionName = function() {} vs function functionName() {}을 참조하십시오.

+0

그러나 선언 된 함수의 값은 어떻게됩니까? 표현식 함수에서 값은 함수 자체이며 변수에 바인딩됩니다. 그러나 선언 된 함수에서 : 값은 무엇입니까? 그리고 그것은 함수 식별자에 묶여 있습니까? –

+0

값은 여전히 ​​함수 자체이며 변수에도 바인딩됩니다. 차이점은 함수 선언도 변수를 선언하고 변수가'var'처럼'undefined '가 아닌 함수로 초기화된다는 것입니다. – Bergi

+0

함수의 선언에 의해 생성 된이 변수의 이름은 무엇입니까? 함수 이름입니까? : o –

0
당신이 requiredIdentifier() 복귀 값이 undefined의 인 기능을 실행 잘 경우

undefined 사실 자바 스크립트 (ECMA 스크립트)의 기본 데이터 유형입니다.

+0

OP가 반환 값을 묻지 않습니다. – charlietfl

+0

"선언 된 함수에 값이 있습니까/생성합니까?" - 이것이 반환 가치 질문이 아닌가? – evolutionxbox

+0

@evolutionxbox 당신이 그 문장을 읽는다면 "함수 _가/생성 된 값을 실행하지 않습니까?"와는 반대로 "함수가 _ 값을 갖거나 생성합니다"라고 읽지 않는다면 말입니다. OP의 모든 예는 선언과 함께 사용되며 때로는 변수에 지정합니다 (예 : 선언 자체에서 생성 된 값 사용). 어떤 시점에서도 OP가 그 기능을 의미하거나 심지어 그 기능을 수행하는 것에 관심이 있다는 어떠한 표시도 없었습니다. 주어진 첫 번째 예제를 제외하고는 _syntax_를 보여 주기만하면 전체 질문의 기초로 사용되지 않습니다. – vlaz

2

함수 선언은 표현식이 아닌 명령문입니다. 명령문은 표현식에서 사용할 수 없기 때문에 값을 사용할 방법이 없으므로 값이 무엇인지 물어 보는 것은 의미가 없습니다.

그러나 함수 선언의 구문은 명명 된 함수 식의 구문과 동일합니다. 따라서 표현식이 필요한 곳 ​​어디에서나 사용하면 명명 된 함수 표현식으로 취급되며 값은 함수가됩니다. 예를 들어

:

(function requiredIdentifier() {}) 

명명 된 함수식 아닌 함수 선언을 포함하는 괄호 표현이다.그 값은 정의 된 함수입니다.

+0

전적으로 당신에게 동의합니다, 그리고 나는 이미 그것을 알고있었습니다. 신고 된 함수에 가치가 있는지 스스로에게 묻는 것이 무의미하다는 것을 이해합니다. 그러나 JavaScript 또는 ECMAScript의 인턴 기능을 배우는 데 관심이 있기 때문에이를 알고 싶습니다. 인턴에서 신고 된 함수는 어떻게 다루어 집니까? 표현 함수와 같은 값을 생성합니까? –

관련 문제