[javascript] JavaScript가 “;”로 시작해야하는 이유는 무엇입니까?
최근 웹에서 많은 JavaScript 파일 ;
이 주석 섹션 바로 뒤에서 시작된다는 것을 알았습니다 .
예를 들어이 jQuery 플러그인 코드는 다음과 같이 시작합니다.
/**
* jQuery.ScrollTo
* Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 9/11/2008
.... skipping several lines for brevity...
*
* @desc Scroll on both axes, to different values
* @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
*/
;(function( $ ){
파일이 왜 ;
? 로 시작해야 합니까? 서버 측 JavaScript 파일 에서도이 규칙을 봅니다.
이 작업의 장점과 단점은 무엇입니까?
답변
스크립트가 종종 연결되고 축소 / 압축 / 전송되므로 마지막 사람이 다음과 같은 것을 가질 가능성이 있습니다.
return {
'var':'value'
}
마지막 스크립트 ;
가 끝날 때 ;
처음 시작할 때 안전 하다면 , 예를 들면 다음과 같습니다.
return {
'var':'value'
}
;(function( $ ){ //Safe (still, screw you, last guy!)
return {
'var':'value'
}
(function( $ ){ //Oh crap, closure open, kaboom!
return {
'var':'value'
};
;(function( $ ){ //Extra ;, still safe, no harm
답변
나는 이것이 확실하지는 않지만 다른 파일의 이전 진술이 닫히게 할 것이라고 믿습니다. 최악의 경우, 이것은 빈 명령문이지만 가장 좋은 경우에는 완료되지 않은 명령문이 실제로 위에서 올 때이 파일의 오류를 추적하지 않아도됩니다.
답변
이 예제를 고려하십시오.
function a() {
/* this is my function a */
}
a()
(function() {
/* This is my closure */
})()
일어날 일은 다음과 같이 평가 될 것입니다.
function a() {
/* this is my function a */
}
a()(function() {})()
따라서 a
돌아 오는 것은 초기화하려고 시도한 함수로 취급됩니다.
이것은 파일을 여러 파일로 연결하려고 할 때 오류를 방지하기위한 것입니다.
a.js
function a() {
/* this is my function a */
}
a()
b.js
(function() {
/* This is my closure */
})()
이 파일들을 함께 연결하면 문제가 발생합니다.
그러므로 당신 ;
앞에 (
그리고 아마도 다른 장소 앞에 두는 것을 잊지 마십시오 . Btw. var a = 1;;;var b = 2;;;;;;;;;var c = a+b;
완벽하게 유효한 JavaScript입니다