A의 최근 질문 , 내가 다른 것들 사이에 얘기 제안을받은 기능은 ‘일류’객체 자바 스크립트의 측면. 이 문맥에서 ‘퍼스트 클래스’는 다른 대상과 달리 무엇을 의미합니까?
편집 (Jörg W Mittag) : 정확한 중복 : “일등 프로그래밍 구성은 무엇입니까?”
답변
위키 백과 를 인용하려면 :
컴퓨터 과학에서, 프로그래밍 언어는 함수를 일급 객체로 취급하는 경우 일급 함수 (또는 함수 리터럴)를 지원한다고합니다. 즉,이 언어는 프로그램 실행 중 새 함수 구성, 데이터 구조에 저장, 다른 함수에 대한 인수로 전달하고 다른 함수의 값으로 리턴하는 기능을 지원합니다.
이 페이지는 또한 그것을 아름답게 보여줍니다 :
다른 변수와 마찬가지로
- 함수는 객체 유형의 인스턴스입니다
- 함수는 속성을 가질 수 있고 생성자 메서드에 대한 링크를 가지고 있습니다
- 함수를 변수에 저장할 수 있습니다
- 함수를 다른 함수에 매개 변수로 전달할 수 있습니다
- 함수에서 함수를 반환 할 수 있습니다
또한 TrayMan의 의견을 읽으십시오. 흥미로운 …
답변
영국의 컴퓨터 과학자 인 크리스토퍼 스트라 쉐 (Christopher Strachey )는 1960 년대에 프로그래밍 언어에서 “일류 함수” 라는 개념을 도입했습니다 . 이 원칙의 가장 유명한 공식은 Gerald Jay Sussman과 Harry Abelson 의 컴퓨터 프로그램 구조 및 해석에 있습니다 .
- 변수로 이름을 지정할 수 있습니다.
- 그것들은 절차에 대한 논쟁으로 전달 될 수 있습니다.
- 절차 결과로 반환 될 수 있습니다.
- 그것들은 데이터 구조에 포함될 수 있습니다.
기본적으로 이는 프로그래밍 언어의 다른 모든 요소로 수행 할 수있는 모든 기능을 함수로 수행 할 수 있음을 의미합니다. 따라서 JavaScript의 경우 Integer, String, Array 또는 다른 종류의 Object로 수행 할 수 있는 모든 기능을 함수로 수행 할 수 있습니다 .
답변
Strachey-Sussman-Abelson의 제제에 대한보다 완벽한 승인. 따라서 언어가 이러한 구문을 지원하면 일급 언어로 기능을 사용할 수 있습니다 🙂
var men = function (objectOfAdmiration) {
return objectOfAdmiration();
};
men.isSweetHeart = true;
var women = function (objectOfAdmiration) {
return objectOfAdmiration();
};
women.isSweetHeart = true;
var aliens = function (objectOfAdmiration) {
return objectOfAdmiration();
};
function like(obj){
if (obj.isSweetHeart) {
return function (){ return "Holy TRUE!"};
}
else {
return function (){ return "Holy CRAP!"};
}
}
alert("Men like women is " + men(like(women))); // -> "Holly TRUE!"
alert("Women like men is " + women(like(men))); // -> "Holly TRUE!"
alert("Men like aliens is " + men(like(aliens))); // -> "Holly CRAP!"
alert("Aliens like women is " + aliens(like(women))); // -> "Holly TRUE!" :)
//women(like(aliens)); // Who knows? Life is sometimes so unpredictable... :)
요컨대, 언어에서 객체의 상태 조작 종류 또는 객체 유형으로 작동하는 경우 모든 것이 일류 객체입니다. 단순히 작업하고 문장을 전달하고 동시에 표현으로 평가할 수있는 것입니다. 또는 더 짧게 : 함수를 추가로 호출 할 수있는 객체로 생각할 수있을 때.
답변
JavaScript 함수는 함수와 객체가 같은 것으로 취급되는 것을 의미하는 일급 함수입니다. 함수는 객체 또는 배열 내부에 변수로 저장 될 수있을뿐만 아니라 인수로 전달되거나 다른 함수에 의해 반환 될 수 있습니다. 그 기능을 “JavaScript의 일급 시민”으로 만듭니다
JavaScript는 리터럴 표기법 구문을 사용하므로 JavaScript 함수에서 객체라는 사실을 완전히 이해하기 어렵습니다.
예를 들어 ..
var youObj1 = new Object();
// or
var youObj1 = {};
두 편차는 동일합니다. 사용하여new
Object의 생성자 함수를 호출합니다. 또한 {}
(리터럴이라고하는 JavaScript 바로 가기)를 사용하여 Object의 생성 함수를 호출합니다. {}
생성자를 인스턴스화하기위한 짧은 표현입니다.
대부분의 언어는 new
키워드를 사용하여 객체를 생성하므로 JavaScript 객체를 생성 할 수 있습니다.
var myFunction = new Function("a", "b", 'return a_b');
보시다시피 우리는 객체 이름 함수를 만들었습니다 .
JavaScript 함수 표현식을 사용하여 동일한 오브젝트 이름 함수 작성 ..
var myFunction = function myFunction(a,b) {
return a+b;
}
이제 객체 이름 함수를 만들었습니다.
답변
자바 스크립트에서 함수는 객체가 할 수있는 것보다 더 많은 것을 할 수 있기 때문에 일류 객체입니다.
- 함수는 객체 유형의 인스턴스입니다.
Function instanceof Object //returns true
객체와 마찬가지로 함수는 속성을 가질 수 있고 생성자 함수에 대한 링크를 가질 수 있습니다.
var o = {}; // empty object 'o'
o.a = 1 ;
o.b = 2 ;
console.log(o.a); // 1
console.log(o.b); // 2
function foo(){};
foo.a = 3 ;
foo.b = 4 ;
console.log(foo.a); // logs 3
console.log(foo.b); // logs 4
- 함수는 값으로 변수에 저장 될 수 있습니다.
var foo = function(){};
console.log(foo); // function(){}
- 함수는 다른 함수에 인수로 전달 될 수 있습니다
function callback (foo){
foo();
}
callback(function(){console.log('Successfuly invoked as an argument inside function callback')})
- 함수에서 함수를 반환 할 수 있습니다
function foo(){
return function(){console.log('working!')};
}
var bar = foo();
bar(); // working!
- 변수로 참조로 저장할 수 있습니다.
var sum = function (a,b){return a+b}
sum(4,4);
답변
간단한 테스트. 귀하의 언어로 이것을 할 수 있다면 (예를 들어 Python) :
def double(x):
return x*x
f = double
print f(5) #prints 25
귀하의 언어는 함수를 일급 객체로 취급합니다.
답변
그것은 함수가 유형과 행동을 가진 객체라는 것을 의미합니다. 그것들은 동적으로 만들어지고 다른 객체처럼 전달 될 수 있으며, 호출 될 수 있다는 사실은 인터페이스의 일부입니다.
