이 글에서는 var가 있는 JavaScript와 var가 없는 JavaScript의 변수 선언의 차이점에 대해 설명합니다. JS의 변수 선언 범위는 함수를 기반으로 하므로 전역 변수 오염을 방지하는 방법은
(function(){ // ... })();
함수 내에서 var로 선언된 변수와 var 없이 선언된 변수는 다릅니다. var로 선언된 것은 지역 변수이고, var가 없는 것은 전역 변수로 선언되므로 이를 사용하여 인터페이스 내용을 외부 세계에 노출할 수 있습니다.
전역 범위에서 변수를 선언하면 var가 있든 없든 동일하게 보입니다. 선언된 전역 변수가 window의 속성인지 여부를 확인하기 위해 ECMAScrpit5에서 제공하는 속성 쿼리 방법을 사용합니다. 밖으로.
var fff = 2; window.ffa = 3; ffb = 4; this.ffc = 4; var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true
위를 통해 여전히 차이가 있음을 확인했습니다. 삭제를 사용하여 속성을 삭제하면 구성 가능성이 false인 속성은 삭제할 수 없는지 확인하겠습니다. 즉, var 변수를 통해 선언된 전역 객체의 속성은 삭제할 수 없다는 점과 함수 선언으로 생성된 전역 객체의 속성도 삭제할 수 없음을 알 수 있습니다.
delete fff; // 无法删除 delete ffa; // 可删除 delete ffb; // 可删除 delete ffc; // 可删除
결론은 var를 사용하여 전역 변수를 선언하는 것과 var 없이 선언하는 것에는 차이가 있다는 것입니다.
선언문을 반복하기 위해 var 문을 사용하는 것은 합법적이며 무해합니다. 대입문과 함께 문장이 반복된다면 일반 대입문과 다르지 않습니다. 선언되지 않은 변수를 읽으려고 하면 JS가 오류를 보고합니다.
JavaScript의 함수 범위 내에서 선언된 변수나 내부 함수는 함수 본문에 표시됩니다. 즉, 함수가 정의되기 전에 사용 가능할 수도 있습니다. 함수를 정의하는 방법에는 두 가지가 있습니다. 하나는 함수 정의 표현식이고 다른 하나는 함수 선언문입니다.
// 函数定义表达式 var fns = function (){ // ... }; // 函数声明语句 function fns(){ // ... }
함수 선언문은 외부 스크립트나 외부 함수 범위의 최상위에 "고급"되어 있으므로, 이렇게 선언된 함수는 정의되기 전에 나타나는 코드로 호출할 수 있습니다. 함수 정의 표현식에서는 변수 선언이 진행되지만 변수에 대한 할당은 진행되지 않습니다. 따라서 표현식에 정의된 함수는 함수가 정의되기 전에 호출될 수 없습니다.
(function() { testa(); // 打印出testa testb(); // 报错:提示undefined is not a function console.log(testc); //undefined,如果移到上面就可以了 function testa() { console.log("testa"); } var testb = function() { console.log("tesb"); } var testc = "testc"; })();
물론 변수와 함수를 선언할 때는 기본 사양을 준수해야 합니다. 변수와 함수는 미리 선언해야 합니다.