자바스크립트에는 main 함수가 없습니다. main 함수는 Java, C 언어에서 자주 사용되며, 반환값을 가지고 있어야 하며, 0을 반환하면 프로그램이 정상적으로 실행되었음을 의미하고, 0이 아닌 값을 반환하면 프로그램이 실행되었음을 의미한다. 비정상적으로 종료되지만 이 함수는 JavaScript에 존재하지 않습니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
Javascript에는 기본 기능이 없습니다
소개
기본 기능이라고도 알려진 기본 기능은 대부분의 C 프로그램의 유일한 진입점이며 반환 값 프로그램의 실행 상태를 나타내기 위해 운영 체제 등으로 반환되는 반환 값입니다. 0을 반환하면 프로그램이 정상적으로 실행되었다는 의미이고, 0이 아닌 값을 반환하면 프로그램이 비정상적으로 종료된다는 의미이므로 반환값은 정수형이어야 하므로 int main()이라는 사양이 있다.
main 함수에 반환 값이 없음을 의미하는 void main()을 사용하면 프로그램이 성공적으로 컴파일되고 실행될 수 있지만 프로그램 활성화자가 상태를 판단하는 데 도움이 되지 않습니다. 많은 C 프로그램으로 구성된 프로젝트는 치명적입니다.
특히 C99 표준(1999년에 제정된 공식 C 언어 표준의 두 번째 버전)부터 int main()을 사용해야 합니다. return 0; 직접 작성하는 것이 좋은 습관입니다.) main()만 선언된 경우 시스템은 기본적으로 int main()으로 설정됩니다. void main()은 절대로 사용하면 안 됩니다. 왜냐하면 main 함수에는 프로그램의 실행 상태를 나타내는 반환 값이 있어야 하기 때문입니다(코드에서 void main()을 사용하지 않는 것이 좋은 습관입니다).
Definition
최신 C99 표준에서는 다음 두 정의만 정확합니다.
int main(void) int main(int argc, char *argv[]) // char *argv[]可以写成char **argv
Parameters
void: 어떤 매개변수도 허용하지 않습니다.
argc: 프로그램이 실행되는 환경을 나타냅니다. 프로그램에 전달된 매개변수 수
argv: argc+1 포인터 배열의 첫 번째 요소에 대한 포인터입니다. 배열의 마지막 요소는 널 포인터이며, 이전 요소가 있는 경우 호스트 환경에서 프로그램에 전달된 매개변수를 나타내는 문자열을 가리킵니다. argv[0]이 널 포인터(또는 argc>0)가 아니면 프로그램 이름을 나타내는 문자열을 가리킵니다. 호스트 환경에서 프로그램 이름을 사용할 수 없는 경우 이 문자열은 비어 있습니다.
반환 값
반환 값은 exit()에 대한 암시적 호출의 매개 변수로 사용됩니다. 값이 0과 EXIT_SUCCESS이면 성공적인 종료를 나타내고, 0과 EXIT_FAILURE가 아닌 값은 실패한 종료를 나타냅니다.
예제는 다음과 같습니다. JavaScript로 메인 함수를 구성합니다
C와 Java에는 프로그램에 대한 진입 함수나 메소드, 즉 메인 함수나 메인 메소드가 있습니다. JavaScript에서 프로그램은 JS 소스 파일의 헤드에서 실행됩니다. 그러나 어떤 의미에서는 프로그램의 시작점으로 주요 기능을 구성할 수 있습니다. 이렇게 하면 다른 언어와 통합될 수 있을 뿐만 아니라 JS에 대한 더 깊은 이해를 갖게 될 수도 있습니다.
1. 실제 입구
자바스크립트 파일이 JS 엔진에 넘겨져 실행되면 JS 엔진은 모든 코드가 실행될 때까지 위에서 아래로 각 문을 하나씩 실행합니다.
2. 범위 체인, 전역 범위 및 전역 객체
우리는 JS의 모든 함수가 실행될 때 새로운 범위를 생성한다는 것을 알고 있습니다. 구체적으로 말하면, 실행 흐름이 함수에 들어갈 때 새로운 범위가 생성되고, 함수가 실행을 완료하고 종료할 때 이 범위가 소멸됩니다. 함수의 형식 매개변수와 지역 변수는 이 범위에 바인딩됩니다. 함수 호출이 범위 소멸을 완료하면 그에 따라 소멸됩니다. 물론, 특별한 경우, 함수가 반환될 때 범위의 일부 변수가 여전히 참조되는 경우 범위와 이러한 참조된 변수는 소위 클로저를 형성하여 파괴되지 않습니다.
반면에 함수가 중첩될 수 있으므로 범위도 중첩될 수 있다는 것을 알고 있습니다. 함수가 정의되면 JS 엔진은 각 함수에 대해 외부 함수의 어휘 범위를 가리키는 [[scope]]라는 내장 속성을 설정합니다. 이러한 방식으로 여러 범위가 범위 체인이라는 체인 구조를 형성합니다. 일반적으로 언제든지 하나의 범위 체인만 있습니다. 즉, 실행 함수의 범위에서 시작하여 가장 바깥쪽 전역 범위까지 계층별로 위쪽으로 추적합니다.
[참고]: 범위 체인의 함수는 JS 소스 코드에서 계층별로 중첩된 함수입니다. 함수가 실행되는 순서나 함수 호출 스택과 관련이 없습니다. 이름 어휘 범위.
전역 범위는 함수 범위가 아니지만 모든 함수 범위의 외부 범위이자 모든 범위 체인의 끝점입니다. 따라서 프로그램이 종료되지 않는 한 전역 범위는 항상 존재하며 전역 범위의 변수는 항상 유효합니다.
[함수 3의 범위]-->[함수 2의 범위]-->[함수 3의 범위]-->[전역 범위]
그 외에도 전역 범위에 해당하는, 글로벌 객체. 브라우저에서 전역 개체는 창 개체입니다. 전역 개체는 특수 개체입니다.
전역 범위에 정의된 변수는 전역 개체에 바인딩됩니다.
在任意作用域中定义的变量,如果定义时没有用 var 关键字,都会绑定到全局对象。
在全局作用域中, this 指向全局对象。
从上面列举的这些特性可以看出,如果把全局作用域当成一个对象的话,那么实际上它就是全局对象。另外,这也解释了在全局作用域中,下面的四条语句为什么是等价的:
var a = 1; a = 1; window.a = 1; this.a = 1;
3. 虚构的main函数
既然都是作用域,为什么要有一个特殊的全局作用域呢?我们总是喜欢简单化、一致性,而尽量避免复杂化、特殊性。所以很自然地,我们会想能否让全局作用域看起来跟函数作用域没什么区别?答案是肯定的。我们可以做这样的构想:
我们想象,在JS引擎执行源文件时,会将文件中的代码包装到一个叫做main的函数中。然后把这个main函数作为程序的入口。
也就是说,假设一个JS文件中有这样的代码:
var a = 1; var b = 2; function add(x, y) { var z = x + y; return z; } console.log(add(a, b));
JS引擎在程序开始执行前会把它包装成一个main函数:
// 虚构的main函数 function main() { var a = 1; var b = 2; function add(x, y) { var z = x + y; return z; } console.log(add(a, b)); }
然后,调用这个main函数:
main._current_scope_ = window; // 将全局作用域(对象)设为window main.call(window) // 将this指向window
4. 意义何在?
(1) JS也有了入口函数main,跟其他语言一致了。
(2) 省去了全局作用域的概念,或者说全局作用域也成了函数作用域。
(3) 通过上面对main函数的调用过程,可以明白全局作用域中的那些特殊性质的由来。
(4) 最后一点,将所有JS源码当成一个函数,是为了后面讲事件队列、事件循环做铺垫。
相关推荐:javascript学习教程
위 내용은 자바스크립트에는 주요 기능이 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!