2016-06-21 8 views
1

우리가 기능을 사용하여 함수를 만들 때까지 new function(){ ... }자바 스크립트 새로운 기능 발현과 새로운 기능 생성자

new Function(); 이상 나의 이해/가정

  • 을 사용하는 결과 객체에 대한 내 질문() 또는 새 Function() 함수로 구성된 객체를 얻습니다. 내부 슬롯은 함수 유형 객체를 나타냅니다.
  • new 연산자가 있거나 없으면 Function() 생성자는 새 함수 obj를 반환합니다. 함수 표현식을 사용하여 요법은
  • 내부적으로 나의 가정에 따라
  • 함수 표현식은 함수 본문

내 질문

을 구문 분석과 최적화를 제공하는 기능() 생성자를 사용하는 함수 객체를 반환 이상, new Function();new function(){ ... }은 왜 다른 것을 반환합니까?

첫 번째는 함수 객체를 반환하지만 후자는 표준 객체를 반환합니다. 후드 아래의 함수 표현식이 Function() 생성자를 사용한다고 가정 할 때 후자는 new Function();과 동일한 동작을하지 않는 이유는 무엇입니까?

new function(){ ...}을 사용하면 표준 객체가 아닌 함수 객체를 기대합니다.

+2

'함수() {} == 새로운 함수() ','새로운 함수() {} == 새로운 새로운 함수()' . – zzzzBov

답변

2

다음 행은 본질적으로 동일하다 :

function foo(...) {...} 
var foo = function (...) {...}; 
var foo = new Function (...); 

그들은 모두 새로운 함수를 선언 (객체 인, 즉 Object 프로토 타입 상속 Function의 인스턴스이며, ...)을에 현재 범위는 foo 변수를 통해 액세스 할 수 있습니다.

new 키워드는 표준 OOP 언어로 클래스 인스턴스와 비슷한 것을 만들 수있는 함수에서 개체를 인스턴스화합니다.

위에서 예를 계속 :

var bar = new foo(...) 

bar는 변수를 통해 액세스 할 수있는 범위에서의 전류 foo 함수의 인스턴스를 초기화한다.

new Function();new function(){ ... }은 다른 것을 반환합니까?


나는 약간 예를 바꿔거야. 대신에 :

new Function() 
//and 
new function(){ ... } 

나는

new Function() 
//and 
var foo = function() { ... }; 
new foo(); 

new Function()Functionfoo에서 다른 기능이기 때문에 new foo()와 다른 것은 전적으로 반환하는 이유를 사용하는거야.

new Object()new Array()과 다른 기능을 가진 다른 개체를 반환한다는 사실에 혼란스럽지 않을 것으로 예상됩니다. 정확히 똑같은 일이 여기서 일어나고 있습니다.

은 후드 아래 함수 표현식은 Function() 생성자를 사용하는 점을 감안, 왜 후자는 new Function();와 동일하게 작동하지 않는 이유는 무엇입니까?

후드 아래 이상 발현은 본질적 :

new (new Function (...)) 
+0

위대한 답변, 고마워요. – Brummy

1

new function (...)은 새 함수을 반환하고 new function() {...}은 새 객체을 반환합니다.

기본적으로 Function은 코드 조각을 평가하는 한 가지 방법입니다.

개체는 데이터를 자바 스크립트에 저장하는 방법입니다.

사이드 참고 : 기술적으로

new (new Function(...)) 

느릅 나무는 새로운 객체를 반환 할 수 있습니다.