소개
자바스크립트는 해석형 언어이며 하향식으로 실행됩니다. 그러나 브라우저마다 "하향식"에 대한 이해가 조금씩 다르며, 코드의 업스트림과 다운스트림, 즉 프로그램 흐름이 프로그램의 올바른 작동에 매우 중요합니다. 그래서 우리는 js의 실행 순서를 깊이 이해해야 합니다. 이를 위해 가장 정확한 결과를 얻기 위해 다음과 같은 8가지 실험을 설계했습니다.
실험
< script type= "text/javascript">
//실험 1:
function t(a)
{
alert("[t(a)]a:" a); >}
함수 t(a, b)
{
alert("[t(a, b)]a:" a ", b:" b)
}
t (1) ;
//결과:
//[t(a, b)]a:1, b:정의되지 않음
//실험 2:
함수 t(a, b)
{
alert("[t(a, b)]a:" a ", b:" b)
}
함수 t(a)
{
alert( "[t(a)]a:" a);
}
t(1)
//결과:
//[t(a)]a:1
//실험 3:
function t(a)
{
alert("[t(a)]a:" a)
}
function t( a, b )
{
alert("[t(a, b)]a:" a ", b:" b)
}
t(1, 2); >// 결과:
//[t(a, b)]a:1, b:2
//실험 4:
함수 t(a, b)
{
Alert("[t(a, b)]a:" a ", b:" b)
}
function t(a)
{
alert("[t (a) ]a:" a);
}
t(1, 2);
//결과:
//[t(a)]a:1
// 실험 5
함수 t(a)
{
alert("[t(a)]a:" a)
}
t(1); function t( a, b)
{
alert("[t(a, b)]a:" a ", b:" b)
}
//결과:
// [t(a, b)]a:1, b:정의되지 않음
//실험 6
함수 t(a)
{
alert("[t(a )]a :" a);
}
t(1, 2);
함수 t(a, b)
{
alert("[t(a, b)] a:" a ", b:" b);
}
//결과:
//[t(a, b)]a:1, b:2
/ /실험 7
함수 t(a, b)
{
alert("[t(a, b)]a:" a ", b:" b)
}
t(1 );
함수 t(a)
{
alert("[t(a)]a:" a)
}
//결과:
/ /[t (a)]a:1
//실험 8
함수 t(a, b)
{
alert("[t(a, b)]a: " a " , b:" b);
}
t(1, 2);
function t(a)
{
alert("[t(a)]a: " a) ;
}
//결과:
//[t(a)]a:1
추첨
자바스크립트 함수를 정의할 때 함수 이름은 함수 개체의 식별자이고 매개변수 개수는 함수의 속성일 뿐입니다. 매개변수 개수가 다른 함수를 정의하여 오버로딩을 구현하는 것은 불가능합니다.
함수 호출 시 js는 함수명을 통해 해당 함수 객체를 찾은 후, 함수 정의 시 매개변수에 따라 표현식 매개변수 목록을 순서대로 매칭하고, 초과된 매개변수는 폐기하고, 부족한 매개변수는 처리합니다. 정의되지 않은 다음 함수가 실행됩니다.
그래서 함수를 정의할 때 필수 매개변수는 일반적으로 매개변수 목록의 시작 부분에 배치되고, 선택적 매개변수는 필수 매개변수 뒤에 배치됩니다.
참고
1. 위 8가지 실험의 결과는 360 브라우저(버전/커널: 6.3.1.142/21.0.1180.89) 및 Firefox 브라우저(버전: 27.0.1 )를 통해 얻은 것입니다. 실행하여 얻습니다.
2. 위의 8개 실험은 서로 독립적입니다. 올바른 결과를 얻으려면 별도로 실행하세요.