이 글에서는 JavaScript의 범위와 변수에 대해 설명합니다. JavaScript의 범위와 변수에 대해 모르거나 JavaScript의 범위와 변수에 관심이 있다면 이 글을 살펴보겠습니다. 헛소리는 그만하고 본론으로 들어가세요
변수 범위
범위: 변수가 선언되는 영역이자, 변수와 함수가 접근할 수 있는 범위이기도 합니다. 전역적으로 선언된 변수는 전역적으로 표시되고 액세스 가능합니다. 함수 내부에 선언된 변수가 함수 내에서만 액세스 가능한 경우 이를 지역 변수라고 합니다.
몇 가지 참고 사항:
1.JavaScript에는 블록 수준 범위가 없습니다(ES5 및 ES6 이전) , 함수 범위 및 전역 범위만 있습니다. for 루프 내부에 정의된 변수에는 함수 수준 범위가 있습니다.
2. 변수가 함수 내에서 선언되지 않거나 var 없이 선언된 경우 해당 변수는 전역 변수이며 전역 범위를 갖습니다. 특수: var a = b = c = 0; b와 c는 전역 변수입니다 .
3.변수의 범위는 선언된 시간을 기준으로 합니다. 변수의 범위는 js 코드의 구문 분석 단계에서 이미 규칙을 완료했기 때문입니다.
간단한 경우:
//变量的作用域 var t = 90; //全局作用域,在js代码中任何一个地方都可以访问 function f1(){ //f1函数 在全局作用域中 var t2 = 10; //t2是f1函数内部变量,只有在f1内可访问 console.log(t2); function f2(){ //f2函数 在f1函数的作用域中 var t3 = 20;//只能在f2函数内部才能访问 console.log(t3); return t2*t3; // 访问了父级作用域中的t3 } return f2(); } var m = f1(); console.log(m);
2. 블록 수준 범위 없음
앞서 JavaScript에는 블록 수준 범위가 없다고 언급했는데, 이는 이전에 es5 및 es6에 대한 것입니다. 9 (const 등을 지정하십시오). for 루프와 while 루프에 정의된 변수의 범위는 함수 수준 범위입니다.
예:
//没有块级作用域 function f1(){ for(var i=0;i<10;i++){//i变量是在for中定义的 console.log(i);//打印1-9 } console.log(i);//可以访问到i变量 打印10 而在c++ Java等语言中是不行的 } f1();
3. 변수 호이스팅(hositing)
js 엔진이 js 코드를 실행하면, 먼저 글로벌 EC를 생성합니다. (context) 및 함수의 EC(함수가 있는 경우)를 생성할 때 현재 사용자 도메인에 선언된 변수가 정의되지 않은 상태로 초기화됩니다. 어떻게 초기화하나요? js 엔진은 먼저 현재 범위에서 변수 정의 var를 찾습니다. 이 정의를 찾으면 범위의 맨 앞으로 승격되어 메모리(예: EC의 변수 개체 VO)에 저장됩니다. 정의되지 않았습니다.
사례:
var a = 10; function f1(){ //在这里首先会创建f1的执行上下文 并把里面的变量初始化为undefined console.log(a); //代码执行到这里的时候, js引擎会去当前作用域内存中问有没有这个变量的声明,发现有,那么就给他初始的undefined //假如说下面没有var变量进行定义a,那么js就会向父级作用域中去找这个变量,直到找到为止 var a = 19; //在这里给a赋值了19 console.log(a); // 打印了19 } f1(); console.log(a); //这里无疑是10 没什么问题
그래서 js 엔진이 컨텍스트를 생성할 때 필요한 변수를 승격시키는 것이 ES6에서는 보안 보호 메커니즘이라고 할 수 있습니다. 자세하게 논의됩니다.
참고: 변수 선언과 함수 선언의 이름이 같으면 함수의 우선순위가 더 높습니다.
console.log(b); //打印b(){} var b = 9; function b(){ } console.log(b); //打印9
함수가 맨 앞으로 승격되었으므로 처음에 인쇄되는 것은 의심할 바 없이 b(){}입니다. js는 동적 언어이기 때문에 b는 9로 재할당되어 이전 함수를 덮어씁니다.
사례 1:
if ("a" in window) { var a = 1; } console.log(a);
먼저 코드를 보니 대답이 무엇인가요? Uncaught ReferenceError: a is not Defined?
말해 보세요, 답은 1
우선, var a = 1이 실제로 전역 변수(에 속하는)를 정의한다는 것을 알아야 합니다.
), if가 블록 범위가 아니기 때문에 es5 이전에는 JavaScript에 블록 범위가 없었기 때문입니다. 그래서 이 조건부 판단이 성립됩니다.
if (!("a" in window)) { var a = 1; } console.log(a);
그럼 이건 뭘까요? 조건이 설정되지 않았고 a에 대한 할당이 성공하지 못했기 때문에 대답은 정의되지 않았습니다. 기본값은 undefine
입니다.
案例二:
fun(); console.log(a); console.log(b); console.log(c); function fun(){ var a = b = c = 10; console.log("fun中的a="+a); console.log("fun中的b="+b); console.log("fun中的c="+c); }
你得答案是什么?
答案是:
由于a没有定义,所以直接报错,下面的两行代码被阻止执行了,假如把外面的console.log(a)注释掉呢?
fun(); //console.log(a); console.log(b); console.log(c); function fun(){ var a = b = c = 10; console.log("fun中的a="+a); console.log("fun中的b="+b); console.log("fun中的c="+c); }
输出的是:
为什么外面b c都会是10呢? 原因就是var a = b = c = 10 ;其中b c就是全局变量,如果你想定义三个内部变量,那么应该这样定义:
var a = 10 ,b = 10, c = 10;
弄懂了以上这些区别,基本上变量提升就没什么大问题了。以上就是本篇文章的所有内容,大家要是还不太了解的话,可以自己多实现两边就很容易掌握了哦!
相关推荐:
위 내용은 JavaScript의 범위와 변수 자세히 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Dreamweaver Mac版
시각적 웹 개발 도구
