자 바스 크 립 트 의 대괄호 "{}" 의 다 의성 분석
어의 1, 복합 문 구 를 조직 하 는 것 이 가장 흔히 볼 수 있 는 것 이다.
if( condition ) {
//...
}else {
//...
}
for() {
//...
}
의미 2, 대상 직접 량 성명
var obj = {
name : 'jack',
age : 23
};
전체 값 부여 문 입 니 다. {name: jack, age: 23} 은 표현 식 입 니 다.
의미 3, 성명 함수 또는 함수 직접 량
function f1(){
//...
}
var f2 = function(){
//...
}
f1 과 비 f2 의 차 이 는 전자 가 문법 해석 기 에 있 고 후 자 는 운행 기 에 있다 는 것 이다.차이 점 은 이 함수 의 코드 를 함수 정의 후에 호출 하면 차이 가 없다 는 것 이다.이 함수 의 코드 를 함수 정의 전에 호출 하면 f1 은 호출 할 수 있 고 f2 는 오 류 를 보고 하여 f2 가 정의 되 지 않 았 음 을 알려 줍 니 다.
의미 4, 구조 화 이상 처리 문법 기호
try {
//...
}catch( ex ){
//...
}finally{
//...
}
여기에 있 는 대괄호 와 일치 하 는 문장 (의미 1) 은 차이 가 있 습 니 다. 대괄호 에 한 문장 만 있 으 면 if / else / for 등에 서 대괄호 는 생략 할 수 있 지만 try / catch / finally 는 생략 할 수 없습니다.
다음 코드 는 N 구 를 꼬 았 습 니 다.
function(){}() // ,
{}.constructor // ,
왜 []. constructor 가 이렇게 썼 는데 도 틀 리 지 않 는 지 이해 할 수 없다. 하 나 는 대상 의 직접 양 을 얻 으 려 는 구조 기 이 고, 하 나 는 배열 의 직접 양 을 얻 으 려 는 구조 기 일 뿐이다.
물론 변 수 를 추가 해서 받 아 도 틀 리 지 않 습 니 다.
var c = {}.constructor;
같은 상황
var fn = function () {} () 도 틀 리 지 않 습 니 다.
실제 적 으로 js 의 '문구 우선' 이 이상 한 짓 을 하고 있 습 니 다. 즉, {} 은 대상 의 직접 양 (의미 2) 이나 성명 함수 (의미 3) 의 의미 가 아 닌 복합 구문 블록 (의미 1) 으로 이해 되 고 있 습 니 다.
function () {} (), 괄호 는 복합 문장 으로 이해 되 며, 자 연 스 럽 게 앞의 function () 성명 함수 의 문법 이 완전 하지 않 아 문법 분석 기 에 오류 가 발생 합 니 다.{}. constructor, 대괄호 는 복합 문 으로 이해 되 고 대괄호 뒤 에는 점 연산 자 이 며 점 연산 자 앞 에 합 리 적 인 대상 이 없 으 면 자 연 스 럽 게 잘못 보고 합 니 다.
복구 방식 은 잘 알려 져 있 습 니 다. 강제 연산 자 () (function () {}), (function () {}), /함수 (의미 3) 로 강제로 이해 하고 '함수 ()' 는 이 함 수 를 실행 하 는 것 을 표시 합 니 다. 즉, 성명 후 즉시 실 행 됩 니 다.({}). constructor / / ({}) 는 대괄호 를 대상 의 직접 양 (의미 2) 으로 강제로 이해 하고, '대상. xx' 는 대상 을 가 져 오 는 구성원 을 표시 하 며, 자 연 스 럽 게 뒤의 점 연산 자 를 정상적으로 실행 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.