JavaScript에서 중괄호 사용: 1. 복합 명령문을 구성하는 데 사용됩니다. 2. 대부분의 경우 속성과 값이 쌍을 이루어야 하는 객체를 정의하는 데 사용됩니다. 3. 함수 또는 함수 리터럴을 선언하는 데 사용됩니다. 구조적 예외 처리를 위한 구문 표기법입니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.
Javascript의 중괄호 "{}"에는 네 가지 의미 기능이 있습니다:
Semantic 1. 가장 일반적인 복합 문 구성:
if( condition ) { //... }else { //... } for() { //... }
Semantic 2, 객체 리터럴 선언:
var obj = { name : 'jack', age : 23 };
전체는 {name:'jack',age:23}이 표현식인 대입문입니다.
의미 3, 함수 또는 함수 리터럴 선언:
function f1(){ //... } var f2 = function(){ //... }
f1과 non-f2의 차이점은 전자는 구문 해석 기간에 있고 후자는 런타임에 있다는 것입니다. 차이점은 다음과 같습니다. 함수를 호출하는 코드가 함수 정의 뒤에 있으면 차이가 없습니다. 함수를 호출하는 코드가 함수 정의 앞에 있으면 f1은 계속 호출될 수 있지만 f2는 다음과 같은 오류를 보고합니다. f2가 정의되지 않았습니다.
의미 4, 구조화된 예외 처리를 위한 문법 기호:
try { //... }catch( ex ){ //... }finally{ //... }
여기의 중괄호와 일치하는 문(의미 1) 사이에는 차이가 있습니다. 중괄호 안에 문이 하나만 있으면 if/에 있습니다. else/for 등. 중괄호는 생략할 수 있지만 try/catch/finally는 생략할 수 없습니다.
저는 다음 코드로 오랫동안 어려움을 겪었습니다.
function(){}() //匿名函数立即执行, 语法分析期报 {}.constructor //获取对象直接量的构造器,语法分析期报错
어리석은 것은 [].constructor가 이렇게 작성되었지만 오류를 보고하지 않는 이유입니다. 하나는 직접 값을 얻으려는 생성자입니다. 객체이고 다른 하나는 배열의 직접적인 값을 얻으려는 생성자입니다.
물론 수신할 변수를 추가하면 오류가 보고되지 않습니다. var c = {}.constructor;
var fn = function(){}()과 같은 동일한 상황에서는 오류가 발생하지 않습니다. 보고됩니다.
실제로 문제를 일으키는 것은 js의 "문 우선순위"입니다. 즉, {}는 객체 리터럴의 의미(의미 2)나 선언된 함수(의미)가 아닌 복합 명령문 블록(의미 1)으로 이해됩니다( 의미 3).
function(){}(), 중괄호는 당연히 이전 function() 선언 함수의 구문이 불완전하여 구문 분석 중에 오류가 발생합니다. {}.constructor에서 중괄호는 복합문으로 이해되며, 중괄호 뒤에 도트 연산자가 옵니다. 도트 연산자 앞에 합리적인 개체가 없으면 자연스럽게 오류가 보고됩니다.
수정 사항은 잘 알려져 있습니다: 필수 연산자 추가 ()
(function(){})(), (function(){});//강제로 함수로 이해되도록 합니다(의미 3). , "function()" 함수가 실행됨을 나타냅니다. 즉, 선언 직후에 실행됩니다. ({}).constructor //({})는 중괄호를 객체 리터럴로 이해하도록 합니다(의미 체계 2). "Object.xx"는 객체의 멤버를 얻는 것을 의미합니다. 당연히 후속 점 연산자는 정상적으로 실행될 수 있습니다. .
function(){}(); 구문 오류의 원인은 () 함수 호출 연산자와 관련이 없습니다.
필수적인 이유는 function(){}이 어휘 분석 기간에 따라 토큰을 효과적으로 그룹화하기 때문입니다. function은 이 ExpressionStatement의 시작 위치에 있는 첫 번째 토큰 요소로 간주됩니다. 이는 EMCA262에서는 허용되지 않습니다. 허용되지 않는 이유는 매우 명확합니다. 즉, 함수 표현식과 함수 선언 사이에 모호성을 유발할 것을 두려워하기 때문입니다. Function 키워드는 ExpressionStaement의 첫 번째 위치에 올 수 없다는 것을 이해할 수 있습니다.
대입문을 살펴보겠습니다. f = function(){};
f : LeftHandSideExpression = : AssignmentOperator
function(){}; 이때 전체 문의 대입식 부분, 즉 AssignmentExpression으로 간주됩니다. 그래서 합리적이고 합법적인 문법 검사를 통과하여 FunctionExpression이 되었습니다.
그래서 이때 f = function(){}(); 이라고 해도 문법적으로는 합법적입니다.
관련 권장 사항: javascript 학습 튜토리얼
위 내용은 자바스크립트에서 중괄호는 어떻게 사용되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!