[javascript] ‘일등 객체’란 무엇입니까?

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

귀하의 언어는 함수를 일급 객체로 취급합니다.


답변

그것은 함수가 유형과 행동을 가진 객체라는 것을 의미합니다. 그것들은 동적으로 만들어지고 다른 객체처럼 전달 될 수 있으며, 호출 될 수 있다는 사실은 인터페이스의 일부입니다.