변수에는 전역 변수와 지역 변수라는 두 가지 범위가 있습니다. 이 글은 주로 JS의 변수 범위에 대한 심층 분석을 공유하여 모든 사람에게 도움이 되기를 바랍니다.
最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的: var n=10; function f1(){ console.log(n); } f1(); // 输出10,说明全局变量n在函数内部被读取
局部变量:在函数内部声明的变量。函数内部的变量,外部无法读取。 function f1(){ var n=10; } console.log(n); // 没有定义,说明函数内部的变量,外部无法读取。
for(var i =0;i<10;i++){ } console.log(i)
js의 범위, 이 코드에서는 어떤 결과가 나올 것이라고 생각하시나요? 답은 10입니다. ES5에는 전역 범위와 함수 범위만 있고 블록 범위는 없습니다. 물론 블록 범위의 기능을 구현할 수 있습니다. 아래 코드를 보십시오.
(function(){ for(var i =0;i<10;i++){ } })() console.log(i)
답은 1입니다. 이 작성 방식을 IIFE(즉시 호출 함수 표현식)라고 합니다. 이는 실제로 이 범위에 선언된 변수가 블록 내에서만 유효하며 그럴 수 없습니다. 외부에서 액세스할 수 있습니다. 이 작성 방법의 장점은 전역 변수를 오염시키지 않는다는 것입니다.
여기서 한 가지 더 언급하고 싶은 점은 ES5에서는 변수 선언이 엄격하지 않다는 것입니다. a=10을 사용하여 전역 변수를 직접 선언할 수 있습니다. 다음과 같습니다: r
a=10;console.log(a)
var a=undefined;a=10;console.log(a)
a=10; (function(){console.log(a)var a=1; })();
var a=undefined; a=10; (function(){var a=undefined; console.log(a) a=1; })();
for(let i=0;i<10;i++){ }console.log(a)
a=3let a =10;alert(a)
var a, b; (function () { console.log(a);// undefined console.log(b);// undefined var a = b = 0;// (1) console.log(a);// 0 console.log(b);// 0 })(); console.log('window', a);// window undefined console.log('window', b);// window 0
JavaScript 변수 범위, 메모리, DOM 누수 및 기타 문제의 예에 대한 자세한 설명
🎜JavaScript 변수 범위 예 소개🎜 🎜위 내용은 JS의 변수 범위에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!