함수의 자행, 변수 승급과 함수 승급

6548 단어
사실 이전에 자바스크립트를 처음 배울 때 function add () {}, var add = function () {}, function () {} 같은 이런 표현을 자주 보았지만, 구체적으로 무엇이 무엇인지는 이 문제를 고려해 본 적이 없다.
functionadd () {} 함수 성명이라고 합니다.
varadd=function () {} 함수 표현식이라고 합니다.
function () {} 익명 함수입니다.

1. 함수의 자체 실행


그럼 우리 호출을 통과하지 못하게 할 방법이 있나?
function add(){};
add();

자기 수행이 가능한가요?
저희가 이 세 가지 방법을 해볼게요.
// 
var add=function(x,y){
    console.log(x+y);
}(5,6);     // :11( )
// 
function add(x,y){
    console.log(x+y);
}(5,6);    // : , 
// 
function(){
    console.log(arguments[0]+arguments[1]);
}(5,6);     // : , Uncaught SyntaxError: Unexpected token (

함수 표현식 뒤에 괄호를 넣으면 함수를 즉시 실행할 수 있지만, 함수 성명은 안 됩니다!!
이상하게도 익명 함수도 함수 표현식이지만 왜 문법 오류를 냈을까?이것은 익명 함수가 함수 표현식에 속하지만 값을 부여하지 않은 것이 분명하기 때문이다. 자바스크립트 해석 엔진은 그것을 함수 성명으로 삼아 함수 이름을 요구할 것이다. 그러나 이것은 익명 함수이다. 이름은 틀림없이 없을 것이다. 자바스크립트가 혼합되어 직접 당신에게 잘못을 반성하게 할 것이다.
그러면 어떻게 익명 함수가 이 문제를 실행합니까?사실은 간단합니다. 자바스크립트 해상도에 익명 함수가 함수 성명이 아니라고 알려주면 됩니다.
// 
+function(){
    console.log(arguments[0]+arguments[1]);
}(5,6);
// 
-function(){
    console.log(arguments[0]+arguments[1]);
}(5,6);
// 
!function(){
    console.log(arguments[0]+arguments[1]);
}(5,6);
// 
(function(){
    console.log(arguments[0]+arguments[1]);
})(5,6);
(function(){
    console.log(arguments[0]+arguments[1]);
}(5,6));

다음은 함수 성명 자행 문제를 해결하는 것이다. 사실 방법은 익명 함수 자행 방법과 같다. 더하기, 빼기, 느낌표, 괄호 모두 해결할 수 있다
!function add(x,y){
    console.log(x+y);
}(5,6);
+function add(x,y){
    console.log(x+y);
}(5,6);
-function add(x,y){
    console.log(x+y);
}(5,6);
(function add(x,y){
    console.log(x+y);
})(5,6);
(function add(x,y){
    console.log(x+y);
}(5,6));

2. 변수 승급, 함수 승급


함수 성명이 있어야 향상됩니다. 함수 표현식은 변수 향상에 속합니다.
우리 먼저 아래 코드의 결과가 무엇인지 봅시다
console.log(a);
console.log(b);
console.log(c);
var a=1;
function b(){
    return 2;
}
var c=function(){
    return 3;
}

결과
console.log(c)의 결과와 console.log(a)는 같고 함수 표현식은 변수 향상에 속한다는 것을 설명한다.이렇게 증명하는 것은 여전히 좀 경솔하니, 우리 아래의 코드를 다시 한번 봅시다
console.log(b());
console.log(c());
function b(){
    return 2;
}
var c=function(){
    return 3;
}

결과
결과는 매우 뚜렷하다. 함수 c는 변수명 c를 향상시켰을 뿐이고 함수 성명이 향상되었다!
그러면 변수의 승급과 함수 성명의 승급은 어느 승급의 우선순위가 비교적 높습니까?
console.log(b);
console.log(b());
var b=1;
function b(){
    return 2;
}

결과
그 결과 함수 성명 승급의 우선순위가 변수 승급보다 더 높은 것으로 나타났다.

좋은 웹페이지 즐겨찾기