변수는 많은 프로그래밍 언어의 기본 부분이며 초보자가 배워야 할 첫 번째이자 가장 중요한 개념입니다. JavaScript에는 다양한 변수 속성이 있으며 변수 이름을 지정할 때 따라야 하는 몇 가지 규칙도 있습니다. JavaScript에는 변수를 선언하는 데 사용되는 세 가지 키워드(var, let 및 const)가 있습니다. 각 키워드는 코드가 변수를 다르게 해석하는 방식에 영향을 줍니다.
이 튜토리얼에서는 변수가 무엇인지, 변수를 선언하고 이름을 지정하는 방법을 소개하고 var, let 및 const 간의 차이점을 자세히 살펴봅니다. 또한 호이스팅의 효과와 변수 동작에 대한 전역 및 로컬 범위의 중요성을 검토합니다. [관련 강좌 추천 : JavaScript 동영상 튜토리얼]
변수 이해
변수는 값을 저장하는 데 사용됩니다. 컨테이너. 여러 번 참조할 수 있는 정보는 나중에 사용하거나 수정하기 위해 변수에 저장할 수 있습니다. JavaScript에서 변수에 포함된 값은 숫자, 문자열 또는 개체를 포함한 모든 JavaScript 데이터 유형이 될 수 있습니다.
현재 JavaScript의 기반이 되는 ECMAScript 2015(ES6) 언어 사양 이전에는 변수를 선언하는 방법이 var 키워드를 사용하는 한 가지뿐이었습니다. 따라서 대부분의 이전 코드 및 학습 리소스에서는 변수에 var만 사용합니다. var, let 및 const 키워드의 차이점은 아래 별도 섹션에서 논의하겠습니다.
var를 사용하여 변수 자체의 개념을 보여줄 수 있습니다. 다음 예제에서는 변수를 선언하고 값을 할당합니다.
// Assign the string value Sammy to the username identifier var username = "sammy_shark";
이 문은 다음 부분으로 구성됩니다.
변수를 선언하려면 var 키워드를 사용하세요.
#🎜 🎜 #- 변수 이름(또는 식별자), 사용자 이름
- 할당 작업, = 구문으로 표시
- 할당된 값 "sammy_shark"
// Check if variable is equal to value if (username === "sammy_shark") { console.log(true); }출력:
true앞서 언급했듯이 변수는 모든 JavaScript 데이터 유형을 나타내는 데 사용될 수 있습니다. 이 예에서는 문자열, 숫자, 객체, 부울 및 null 값을 사용하여 변수를 선언합니다.
// Assignment of various variables var name = "Sammy"; var spartans = 300; var kingdoms = [ "mammals", "birds", "fish" ]; var poem = { roses: "red", violets: "blue" }; var success = true; var nothing = null;console.log를 사용하면 특정 변수에 포함된 값을 확인할 수 있습니다.
// Send spartans variable to the console console.log(spartans);출력: 300
//为password变量赋值 var password = "hunter2"; //用一个新值重新分配变量值 password = "hunter3"; console.log(password);출력:
'hunter3'실제 프로그램에서 비밀번호는 데이터베이스에 안전하게 저장될 가능성이 높습니다. 그러나 이 예에서는 변수 값을 업데이트해야 하는 상황을 보여줍니다. 비밀번호 값은 Hunter2였는데, 그 시점부터 JavaScript가 인식하는 값인 Hunter3에 다시 할당했습니다.
이름이 지정된 변수
변수 이름은 JavaScript에서 식별자라고 합니다. JavaScript 구문과 코드 구조를 이해할 때 식별자 이름 지정에 대한 몇 가지 규칙을 논의했습니다. 아래에 요약되어 있습니다: -9), 달러 기호($) 및 밑줄(_)은- 으로 구성됩니다. 변수 이름에는 공백 문자(탭 또는 공백)가 포함될 수 없습니다.
# 🎜🎜#
숫자는 변수 이름의 시작 부분이 될 수 없습니다. -
#🎜🎜 #
예약어는 변수 이름으로 사용할 수 없습니다 # 🎜🎜# 변수 이름은 대소문자를 구분합니다
- #🎜 🎜#JavaScript에도 var 또는 let Case를 사용하여 선언된 함수 및 변수 이름에 카멜 케이스를 사용하는 습관이 있습니다(때때로 카멜 케이스 스타일로 지정됨). 이는 첫 번째 단어를 소문자로 만든 다음, 각 후속 단어의 첫 글자를 공백 없이 대문자로 시작하는 방식입니다. 일부 예외를 제외하고 대부분의 비 const 변수는 이 규칙을 따릅니다. const 키워드를 사용하여 선언된 상수 변수의 이름은 일반적으로 대문자입니다. 이것은 배워야 할 규칙이 많아 보일 수도 있지만 곧 유효하고 일반적인 변수 이름을 작성하는 데 제2의 천성이 될 것입니다.
var, let 및 const의 차이점
키워드 |
범위 | 변수 프로모션 | 재할당 가능 | 재정의 가능 |
---|---|---|---|---|
var | 기능 범위 | 예 | 예 | 예 |
let | 차단 범위 | 아니요 | 예 | 아니요 |
const | 블록 범위 | No | 아니요 | 아니요 |
您可能想知道应该在自己的程序中使用这三种方法中的哪一种。一个普遍接受的做法是尽可能多地使用const,并在循环和重新分配的情况下使用let。通常,在处理遗留代码之外可以避免var。
变量作用域
JavaScript中的作用域是指代码的当前上下文,它决定了变量对JavaScript的可访问性。范围的两种类型是局部的和全局的:
全局变量是在块之外声明的变量
局部变量是在块内声明的变量
在下面的示例中,我们将创建一个全局变量。
//初始化一个全局变量 var creature = "wolf";
我们知道变量可以重新分配。使用局部作用域,我们实际上可以创建与外部作用域中的变量同名的新变量,而无需更改或重新分配原始值。
在下面的示例中,我们将创建一个全局species变量。函数内部是一个具有相同名称的局部变量。通过将它们发送到控制台,我们可以看到变量的值如何根据范围而不同,并且原始值不会更改。
//初始化一个全局变量 var species = "human"; function transform() { //初始化一个局部的、函数作用域的变量 var species = "werewolf"; console.log(species); } //记录全局和局部变量 console.log(species); transform(); console.log(species);
输出:
human werewolf human
在本例中,局部变量是函数作用域的。使用var关键字声明的变量总是函数作用域,这意味着它们将函数识别为具有独立作用域。因此,这个局部作用域的变量不能从全局作用域访问。
然而,新的关键字let和const是块范围的。这意味着从任何类型的块(包括函数块、if语句、for和while循环)创建一个新的本地范围。
为了说明函数作用域变量和块作用域变量之间的区别,我们将使用let在if块中分配一个新变量。
var fullMoon = true; //初始化一个全局变量 let species = "human"; if (fullMoon) { //初始化一个块范围的变量 let species = "werewolf"; console.log(`It is a full moon. Lupin is currently a ${species}.`); } console.log(`It is not a full moon. Lupin is currently a ${species}.`);
输出:
It is a full moon. Lupin is currently a werewolf. It is not a full moon. Lupin is currently a human.
在此示例中,species变量具有一个值global(human),另一个值local(werewolf)。var但是,如果我们使用,则会有不同的结果。
//使用var初始化一个变量 var species = "human"; if (fullMoon) { //尝试在一个块中创建一个新变量 var species = "werewolf"; console.log(`It is a full moon. Lupin is currently a ${species}.`); } console.log(`It is not a full moon. Lupin is currently a ${species}.`);
输出:
It is a full moon. Lupin is currently a werewolf. It is not a full moon. Lupin is currently a werewolf.
在这个例子的结果中,全局变量和块范围的变量都以相同的值结束。这是因为您不是使用var创建一个新的本地变量,而是在相同的范围内重新分配相同的变量。var不能识别是否属于不同的新范围。通常建议声明块范围的变量,因为它们生成的代码不太可能无意中覆盖变量值。
变量提升
到目前为止,在大多数示例中,我们已经使用var声明了一个变量,并使用一个值初始化了它。在声明和初始化之后,我们可以访问或重新分配变量。
如果我们试图在变量被声明和初始化之前使用它,它将返回undefined。
//在声明变量之前尝试使用它 console.log(x); / /变量赋值 var x = 100;
输出:
undefined
但是,如果省略var关键字,就不再声明变量,而是初始化它。它将返回一个ReferenceError并停止脚本的执行。
//在声明变量之前尝试使用它 console.log(x); //没有var的变量赋值 x = 100;
输出:
ReferenceError: x is not defined
原因在于提升,这是JavaScript的一种行为,其中变量和函数声明被移到它们作用域的顶部。由于只挂起实际声明,而没有初始化,因此第一个示例中的值返回未定义的值。
为了更清楚地演示这个概念,下面是我们编写的代码以及JavaScript如何解释它。
// The code we wrote console.log(x); var x = 100; // How JavaScript interpreted it var x; console.log(x); x = 100;
JavaScript在执行脚本之前将x保存为内存作为变量。 由于它在定义之前仍然被调用,因此结果是未定义的而不是100.但是,它不会导致ReferenceError并停止脚本。
尽管var关键字实际上并未更改var的位置,但这有助于表示提升的工作原理。 但是,这种行为可能会导致问题,因为编写此代码的程序员可能希望x的输出为true,而不是undefined。
在下一个例子中,我们还可以看到提升是如何导致不可预测的结果的:
//在全局范围内初始化x var x = 100; function hoist() { //不应影响编码结果的条件 if (false) { var x = 200; } console.log(x); } hoist();
输出:
undefined
在本例中,我们声明x全局为100。根据if语句,x可以更改为200,但是由于条件为false,所以它不应该影响x的值。
这种不可预测的行为可能会在程序中引起bug。由于let和const是块范围的,所以它们不会以这种方式提升,如下所示。
//在全局范围内初始化x let x = true;function hoist() { //在函数作用域中初始化x if (3 === 4) { let x = false; } console.log(x); } hoist();
输出:
true
变量的重复声明(这在var中是可能的)将在let和const中抛出一个错误。
//试图覆盖用var声明的变量 var x = 1; var x = 2; console.log(x);
输出:2
//试图覆盖用let声明的变量 let y = 1; let y = 2; console.log(y);
输出:
Uncaught SyntaxError: Identifier 'y' has already been declared
总之,使用var引入的变量有可能受到提升的影响,提升是JavaScript中的一种机制,其中变量声明被保存到内存中。这可能导致代码中出现未定义的变量。let和const的引入解决了这个问题,它在试图在声明变量之前使用该变量或多次声明该变量时抛出一个错误。
常量
许多编程语言都有常量,这些常量是不能修改或更改的值。在JavaScript中,const标识符是根据常量建模的,不能重新分配分配给const的值。
将所有const标识符都写成大写是常见的约定。这将它们与其他变量值区分开来。
在下面的示例中,我们使用const关键字将变量SPECIES初始化为常量。试图重新分配变量将导致错误。
//给const赋值 const SPECIES = "human"; //尝试重新分配值 SPECIES = "werewolf"; console.log(SPECIES);
输出:
Uncaught TypeError: Assignment to constant variable.
因为不能重新分配const值,所以需要同时声明和初始化它们,否则也会抛出错误。
//声明,但不初始化const const TODO; console.log(TODO);
输出:
Uncaught SyntaxError: Missing initializer in const declaration
不能在编程中更改的值称为不可变值,而可以更改的值是可变的。虽然const值不能重新分配,但是它们是可变的,因为可以修改用const声明的对象的属性。
//创建一个具有两个属性的CAR对象 const CAR = { color: "blue", price: 15000} //修改CAR的属性 CAR.price = 20000; console.log(CAR);
输出:
{ color: 'blue', price: 20000 }
常量非常有用,可以让将来的自己和其他程序员清楚地认识到,不应该重新分配预期的变量。如果您希望将来修改某个变量,那么您可能希望使用let来声明该变量。
本文来自 js教程 栏目,欢迎学习!
위 내용은 JavaScript의 변수, 범위 및 호이스팅에 대한 깊은 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
