[JS] 4. へんすう

9526 ワード

4.1変数は何ですか。どうして必要なの?


コンピュータはCPUを用いて演算を行い,メモリを用いてデータを格納する.
メモリは、データを格納できるデータユニットの集合です.メモリユニットのサイズは1バイト(8ビット)で、コンピュータは1バイト単位でデータを格納または読み出します.各セルには独自のメモリアドレスがあり、メモリ領域の位置を示します.メモリに格納されているすべての値はバイナリ形式で格納されます.
CPUは、10+20,10,20がメモリに記憶されている任意の位置のために、これらの値を取得して演算を実行する.結果は30度のメモリ内の任意の場所に格納されます.
30という結果を繰り返し使用できますか?
30に格納されているメモリ領域に直接アクセスする方法しかありませんが、このプロセスでは致命的なエラーが発生する可能性があります.
プログラミング言語では、メモリに記憶したい値を格納し、格納された値を取得および再使用する「変数」というメカニズムが用意されています.
≪変数|Variable|oem_src≫:値を格納するために保持されるメモリ領域自体またはそのメモリ領域の名前を識別します.値の位置を示す象徴的な名前です.
// 변수는 하나의 값을 저장하기 위한 수단

var userId = 1;
var userName = 'Lee';

// 객체나 배열 같은 자료구조를 사용하면 여러 개의 값을 하나로 그룹화해서 하나의 값처럼 사용할 수 있다. 

var user = { id: 1, name: 'Lee' }

var users = [
	{ id: 1, name: 'Lee' },
	{ id: 2, name: 'Kim' }

]
≪変数名|Variable Name|oem_src≫:メモリ領域に格納されている値を識別する一意の名前.
変数の値:変数に格納された値
≪割当て|Assign|oraolap≫:変数に値を保存します.代入、貯蔵とも呼ばれる
参照:変数に格納されている値の取得
良い変数名は、コードをより理解しやすくし、コラボレーションと品質の向上に役立ちます.したがって,変数名を特定することは非常に重要である!!

4.2識別子


≪識別子|Identifier|ldap≫:一意の名前で、どの値を識別できますか.変数名は識別子とも呼ばれます.
識別子は、値ではなくメモリアドレスを記憶します.これは、識別子がメモリ内のメモリアドレスを介してメモリ空間に格納された値にアクセスできることを意味する.すなわち、メモリアドレスに命名された名前は識別子であってもよい.
識別子は変数に限られ、x.メモリに存在する任意の値を識別できる名前を識別子と呼ぶ.したがって,関数,クラスなども識別子である.
識別子は命名規則に従う必要があります.

4.3宣言変数


宣言変数:変数を作成します.メモリ値のメモリ領域を準備し、保存したメモリ領域のアドレスに変数名を関連付けて、値を保存します.
変数を使用するには、宣言する必要があります.var、let、constのキーワードの使用
varキーワードの欠点を保護するために、ES 6はlet、constを導入した.varを採用する理由を理解するためには,varの欠点を正しく理解する必要がある,15章で紹介する.
ES 6はES 5に加えられた新機能で、基本的に互換性が低い.ES 6はES 5の親です.
var score; // 변수 선언 ( 변수 선언문 )
// 위처럼 변수를 선언한 이후, 아직 변수에 값을 할당하지 않았다면 
// undefined라는 값이 암묵적으로 할당되어 초기화됨. => javascript 특징
≪初期化|Initialization|ldap≫:引数宣言後に初めて値が割り当てられます.
varキーワードとして宣言された変数はUndefinedであり、サイレント初期化を実行します.
変数を使用するには宣言する必要がありますが、宣言なしに識別子にアクセスすると、参照エラーが発生します.識別子が見つからないときに発生したエラー

4.4変数宣言の実行点と変数エスケープ

console.log(score);

var score;
上記のコードでReference Errorは発生しますか?
No
とても面白い部分です.
変数エスケープ:JavaScript固有のプロパティで、変数宣言をコードの先頭にします.
変数宣言は、ソースコードが順次行単位で実行される時点(つまり、前のステップで最初に実行されない場合)であるため、参照エラーは発生しません.
クリーンアップ→JavaScriptエンジンは、ソースコードの変数宣言がどこにあるかにかかわらず、他のコードの前に実行されます.var、let、const、function、function*、classキーを使用して宣言されるすべての識別子は反発します.

4.5値の割当て

// 1
var score;
score = 80;

//2
var score = 80;
上記の2つのコードの動作はまったく同じですが、変数宣言と値割り当ての実行時間が異なります.
変数宣言は、まずソースコード順序実行時の実行時より前に実行され、値の割り当てはソースコード順序実行時の実行時に実行されます.
// A
console.log(score) // undefined

var score; // 1. 변수 선언
score = 80; // 2. 값의 할당

console.log(score); // 80
1つ目は実行時より前に実行し、割り当て値(2)は実行時に実行します.
したがって、2では、変数宣言が完了し、未定義に初期化される.
//B

console.log(score) // undefined

var score = 80; // 변수 선언과 값의 할당

console.log(score); // 80
AとBの違い:
A→変数に値を割り当てると、以前定義されていなかった値が格納されていたメモリ領域が消去され、割り当て値80がメモリ領域に再格納される
B→新しいメモリ領域を取得し、そこに割り当て値80を格納する.

4.6値の再割り当て


再割り当て:値が割り当てられた変数に新しい値を再び割り当てます.
定数:値を再割り当てできないため、変数に格納されている値は変更できません.
constキーを使用して宣言された変数は再割り当てできません.定数はconstキーワードで表すことができます

再割り当て値は、古い値が格納されているメモリ領域を消去し、再割り当て値をメモリ領域に格納するのではなく、新しいメモリ領域を解放し、再割り当て値をメモリ領域に格納します.
では、以前の値は永続メモリに残っていますか?
NO
ごみ収集器によるメモリの不要な値の自動消去
≪ガベージ・コレクター|Garbage Collector|oem_src≫:アプリケーションに割り当てられたメモリ領域を定期的にチェックし、使用されなくなったメモリを消去します.
JavaScriptは管理言語であることがわかります
メモリ管理方式によっては、非管理言語と管理言語で区別できます
C言語のような非規範言語は開発者がメモリ制御を主導する.最適なパフォーマンスが得られますが、致命的なエラーが発生する可能性があります.
JavaScriptのような非仕様言語では、開発者がメモリを制御することはできません.一定の魚性は見られますが、性能的にはある程度の損失を受けます.

識別子命名規則

  • 識別子は、特殊文字以外の文字、数字、アンダーコード()、およびドル記号($)
  • を含むことができる.
  • セグメント.識別子は、特殊文字以外の文字、ベースコード()、およびドル記号($)で始まる必要があります.数字で始まる
  • は許可されていません.
  • リザーバは識別子として使用できません.予約語:プログラミング言語で使用または購入予定の単語.
  • 変数はカンマで区切ることができて、1つの文の中で同時に複数の変数を宣言して、しかし可読性は悪くなって、xを使うことを提案します
    ES 5から識別子の作成を開始するとUnicode文字を使用でき、ハングルなどの識別子を使用できます.
    「-」は変数名として使用できません.
    JavaScript大文字と小文字の区別
    変数名の意味は、変数の存在目的をより容易に理解できるように明確にする必要があります.
    // 네이밍 컨벤션: 
    // 하나 이상의 영어 단어로 구성된 식별자를 만들 때 가독성 좋게 단어를 한눈에 구분하기 위해 규정한 
    // 명명 규칙
    
    // 카멜 케이스 ( cameCase ). 변수나 함수의 이름에 사용
    var firstName;
    
    // 스네이크 케이스 ( snake_case )
    var first_name;
    
    // 파스칼 케이스 ( PascalCase ). 생성자 함수, 클래스 이름에 사용
    var FirstName;
    
    // 헝가리언 케이스 (typeHungarianCase )
    var strFirstName; //type + identifier
    var $elem = document.getElementById('myId') // DOM shem
    var observable$ = fromEvent(document, 'click'); // RxJS 옵저버블