function foo () {}, (function () {}) 등 함수 구별 분석
3198 단어 function
얼마 전에 (function () {}), (function () {} ()) 이 함수들을 보면 어지러워요. 도대체 무슨 뜻인지 모르겠어요. 왜 함수 밖에 괄호를 넣어야 하는지, 함수 뒤에 괄호를 넣어야 하는지, 더하고 안 넣는 것과 도대체 무슨 차이가 있는지... 계속 헷갈려서 톰 아저씨의 JavaScript 시리즈 깊이 이해하기 (4): 즉시 호출되는 함수 표현식를 보고 나서야 그것들이 도대체 무엇인지 알았어요. 드디어 저를 오랫동안 괴롭혔던 것들을 해치웠어요.
여기서 나는 먼저 함수 인용과 함수 호출의 차이, 함수 성명 표현 형식과 함수 표현식의 표현 형식을 소개한다.
1. 함수 인용과 함수 호출의 차이
함수 인용과 호출의 차이는 함수 이름 뒤에 괄호 () 가 있는지 여부와 관련이 있습니다. 함수 인용은 단독으로만 나타나지만 함수 호출 뒤에는 반드시 괄호가 있고 자변수가 붙어 있는 경우가 많습니다.
표현 방식(예: 설명):
function foo(){
//
}
var f = foo; //
var ff = foo(); // , foo(), f()
2. 함수 성명의 표현 형식
함수 이름이 있는 함수는 함수 성명입니다. 보존자 function, 함수 이름 (필수), 원괄호의 매개 변수 (유무무무), 괄호의 함수 주체를 포함합니다.
표현 방식(예: 설명):
function foo(str){
//
}
3. 함수 표현식의 표현 형식
부치 함수, 함수 외에 소괄호가 있는 함수는 함수 표현식(두 가지 예를 들면)이다. 부치 변수(있을 수 있음), 함수 외 소괄호(있을 수 있음), 보존자 function, 함수 이름(있을 수 있고 없을 수 있음), 원괄호의 매개 변수(있을 수 있고 없을 수 있음)와 꽃괄호의 함수 주체를 포함한다.
표현 방식(예: 설명):
//
var f = function foo(str){
//
}
// , ,
(function(){
//
})();
4. 함수 실례
첫 번째:
var foo = function(){}
분석: 이 함수는 함수 표현식이며 인용으로 이해할 수 있으며,foo()로 호출하여 실행할 수 있습니다.
두 번째:
var foo = function(){}();
분석: 이 함수는 즉각 호출 함수입니다. 이것은 첫 번째 차이점과 뒤에 작은 괄호가 있는지 없는지, 즉 함수 호출과 함수 인용의 차이점입니다. 함수 호출은 자체 집행 함수로 이해할 수 있습니다(function(){}에 하나의 괄호를 추가하여 (function(){}) (), 좀 더 규범화되는 것이 좋습니다).
세 번째:
function(){}
분석: 이 함수는 이름이 부족하고 값이 없기 때문에 오류를 보고합니다.
네 번째:
function(){}()
분석:function () {} 은 문장입니다. 함수 표현식이 아니라 표현식만 호출할 수 있기 때문에 오류를 보고합니다.
다섯 번째:
(function(){})();
분석: (function () {}) 은 함수 표현식으로 호출할 수 있으며 익명 실행 함수라고 합니다.
여섯 번째:
(function(){}());
분석: (function () {} ()) 은 함수 표현식으로 사용할 수 있으며 익명 자행 함수라고 부른다.
일곱 번째:
function foo(){}
분석: 이 함수는 실명 함수로 호출할 수 있습니다.
여덟 번째:
function foo(){}();
분석: 해석은 네 번째와 같다. functionfoo(){}는 문장이기 때문에 표현식이 아니라 호출할 수 없기 때문에 오류를 보고한다.
아홉 번째:
function foo(){}(a);
분석: 해석은 네 번째와 같다. functionfoo(){}는 문장이기 때문에 표현식이 아니기 때문에 호출할 수 없지만 뒷괄호에 파라미터가 전송되었기 때문에 이상을 던지지 않은 것은 오류를 보고하기 위한 것이지만 그 자체는 실행되지 않는다.
열 번째:
(function foo(){});
분석:function에 괄호를 추가하기 때문에 외부 작용역에서foo()라는 함수를 호출할 수 없습니다. 그 안에 익명 함수로 간주됩니다. 저는 개인적으로 이런 함수는 의미가 없고 호출할 수도 없고 실행할 수도 없다고 생각합니다.
열한 번째:
(function foo(){})();
분석: 10이 있으면 익명 자행 함수로 이해할 수 있다.그러나 ie8 이하에서 실행할 수 있습니다. 이 표현식은 함수 성명으로 간주되고 함수 성명은'정상 해석'행위가 있습니다. 함수가 어느 곳에 정의되었든지 간에 이 작용역의 맨 위에 기본적으로 성명됩니다.
열두 번째:
!function(){}();
분석: 사실 소괄호와 js의 & & & & 또는 쉼표 등 조작은 함수 성명과 표현식에서 잘못된 뜻을 없애고 실행할 수 있도록 한다.
열세 번째:
new function(){}();
분석: 실행 가능.
마지막으로 고맙습니다.어떤 설명이 좋지 않거나 부정확한 부분이 있으면 최대한 빨리 저에게 피드백을 해주시고 여러분과 함께 발전하시길 바랍니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.