우선 개념이 있습니다. 기능을 지원하는 언어가 아닙니다. 이 언어는 "기능적 언어"라고 부를 수 있습니다. 함수형 언어의 함수에는 호출되는 것 외에도 몇 가지 다른 속성도 있습니다. 세 가지 사항이 있습니다.
1. 함수는 피연산자이다
2. 함수 내에서 데이터를 저장합니다.
3. 함수 내의 작업은 함수 외부에 부작용이 없습니다.
1. 함수는 피연산자이다
일반 함수를 호출할 때 추상적으로 다음과 같이 이해할 수 있습니다. 함수는 연산자이고 전달된 매개변수는 피연산자입니다.
그러나 JavaScript의 함수가 다른 함수의 매개변수로 사용되면 참조가 전달되며 이 "들어오는 매개변수"는 피연산자로 이해될 수 있습니다. 결론적으로 함수("들어오는 매개변수")는 피연산자의 의미를 가지며, "함수 매개변수"는 일반 매개변수와 다르지 않습니다.
2. 함수 내에서 데이터를 저장합니다.
명령형 언어에서는 함수 내의 개인 변수(지역 변수)를 저장할 수 없습니다. 프로그램 실행 관점에서 볼 때 스택에는 지역 변수가 할당되고, 함수 실행이 끝나면 점유된 스택이 해제됩니다. 따라서 함수 내의 데이터를 저장할 수 없습니다.
자바스크립트 함수에서는 함수 내의 프라이빗 변수를 수정할 수 있으며, 다시 함수에 "입력"하면 수정된 상태가 계속됩니다. 다음 예에서는 이 기능을 보여줍니다.
다음과 같이 코드 코드를 복사합니다.
var 설정, 가져오기;
함수 MyFunc(){
변수 값 = 100;
함수 set_value(v){
값 = v;
}
함수 get_value(){
반환값;
}
설정 = 설정_값;
get = get_value;
}
MyFunc();
console.log(get()); //100
세트(300);
console.log(get()); //300
분명한 이점은 데이터 조각이 함수 내에서 유지될 수 있는 경우 데이터가 다른 In에 존재하기 때문에 함수(생성자)가 인스턴스에 할당될 때 여러 인스턴스 간에 작업을 수행하기 위해 데이터를 사용할 수 있다는 것입니다. 폐쇄하면 서로 영향을 미치지 않습니다.
객체 지향 용어로 설명하면, 서로 다른 인스턴스가 자체 개인 데이터(일부 공개 데이터에서 복사됨)를 갖는다는 의미입니다. 다음 예에서는 이 기능을 보여줍니다.
다음과 같이 코드 코드를 복사합니다.
함수 MyObject(){
변수 값 = 100;
this.setValue = 함수(){
값 = v;
}
this.showValue = 함수(){
console.log(값);
}
}
var obj1 = new MyObject();
var obj2 = new MyObject();
obj2.setValue(300);
obj1.showValue(); //100;
3. 함수 내의 작업은 함수 외부에 부작용이 없습니다.
이 기능의 의미는 다음과 같습니다.
* 함수는 입력 매개변수를 사용하여 수정하지 않고 작업을 수행합니다. (가변 매개변수가 아닌 값 매개변수로 사용됨)
* 함수 외부의 다른 데이터(예: 전역 변수)의 값은 작업 중에 수정되지 않습니다.
* 작업이 완료된 후 "함수반환"을 통해 외부시스템으로 값이 전달됩니다.
이러한 기능은 작동 중 외부 시스템에 부작용이 없습니다. 그러나 JavaScript에서는 함수 내에서 전역 변수를 참조하고 수정할 수 있으며 전역 변수를 선언할 수도 있다는 사실을 발견했습니다. 이는 실제로 기능적 특성을 파괴합니다.
또한 JavaScript에서는 함수 내에서 개체 및 배열 멤버를 수정할 수도 있습니다. 이러한 멤버는 개체 시스템 외부의 다른 함수가 아닌 개체 메서드로 수정해야 합니다.
따라서 JavaScript의 이 기능은 개발자의 프로그래밍 습관에 의해서만 보장될 수 있습니다.