ディレクトリ
まず、ECMAScriptのとJavaScriptの関係:
ECMAScriptのは、国際で採択された標準化されたスクリプト言語です。ECMAScriptのとJavaScript DOM、BOM 3つのコンポーネントによって。単にとして理解することができます:ECMAScriptの言語仕様ではJavaScriptで、JavaScriptはECMAScriptの実装と拡張したものです。
{}ブロック1.概要
スコープのJSは、次のとおりです。グローバルスコープ、関数スコープ。ブロックスコープの概念はありません。ECMAScriptの6(ES6の略語)は、ブロックレベルのスコープが追加されています。
ブロックスコープを含む} {if文と{内部文の}ブロックもスコープに属しています。
<script type="text/javascript">
{
var a = 1;
console.log(a); // 1
}
console.log(a); // 1
// 可见,通过var定义的变量可以跨块作用域访问到。
(function A() {
var b = 2;
console.log(b); // 2
})();
// console.log(b); // 报错,
// 可见,通过var定义的变量不能跨函数作用域访问到
if(true) {
var c = 3;
}
console.log(c); // 3
for(var i = 0; i < 4; i++) {
var d = 5;
};
console.log(i); // 4 (循环结束i已经是4,所以此处i为4)
console.log(d); // 5
// if语句和for语句中用var定义的变量可以在外面访问到,
// 可见,if语句和for语句属于块作用域,不属于函数作用域。
{
var a = 1;
let b = 2;
const c = 3;
{
console.log(a); // 1 子作用域可以访问到父作用域的变量
console.log(b); // 2 子作用域可以访问到父作用域的变量
console.log(c); // 3 子作用域可以访问到父作用域的变量
var aa = 11;
let bb = 22;
const cc = 33;
}
console.log(aa); // 11 // 可以跨块访问到子 块作用域 的变量
// console.log(bb); // 报错 bb is not defined
// console.log(cc); // 报错 cc is not defined
}
</script>
違い2. VAR、LETのCONST
1:ブロックアクセス間で変数varの定義、ブロックの概念は、機能間でアクセスすることはできません。
2:変数はアクセスのみでブロックスコープではなく、クロスブロックアクセスでは、それはクロスファンクションアクセスすることはできません定義してみましょう。
3:CONSTは定数を定義するために使用され、それは(すなわち、割り当てられなければならない)に初期化する必要があり、そこにのみブロックスコープでアクセスすることができ、使用中に変更することができません。
4:変数宣言と一方向にのみ使用することができ、又はエラーとなり
<script type="text/javascript">
// 块作用域
{
var a = 1;
let b = 2;
const c = 3;
// c = 4; // 报错
// let a = 'a'; // 报错 注:是上面 var a = 1; 那行报错
// var b = 'b'; // 报错:本行报错
// const a = 'a1'; // 报错 注:是上面 var a = 1; 那行报错
// let c = 'c'; // 报错:本行报错
var aa;
let bb;
// const cc; // 报错
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(aa); // undefined
console.log(bb); // undefined
}
console.log(a); // 1
// console.log(b); // 报错
// console.log(c); // 报错
// 函数作用域
(function A() {
var d = 5;
let e = 6;
const f = 7;
console.log(d); // 5
console.log(e); // 6 (在同一个{ }中,也属于同一个块,可以正常访问到)
console.log(f); // 7 (在同一个{ }中,也属于同一个块,可以正常访问到)
})();
// console.log(d); // 报错
// console.log(e); // 报错
// console.log(f); // 报错
</script>
3:差VAR、聞かせて、constの詳細な
最近の新機能ES6開発の一部を使用し、その過程で、私たちは前ES5およびES6の異なるポイントの数と場所は、私たちの注目を集めました。これによって、レコード:
:1、ことを特徴とする変数宣言新しいウェイES6せて
(1)スコープは、ブロックレベルのスコープである(従来ES6、JSスコープおよびグローバルスコープの機能のみが存在する)
(1)IFを{
LET Aは1 =;
にconsole.log(A)
}
(2)予め変数宣言が存在しないこと;
にconsole.log(B); //にReferenceError:Bが定義されていません
B = 2ましょう。
(3)ない再定義
= 1をみましょう。
= 2をしましょう。
console.log(); //識別子 'A' は既に宣言されています
(4)一時的なデッドゾーンがある。理解することができます
VaRのA = 1;
IF(1){
にconsole.log()。
= 2をしましょう。
}
①ドメインは、可変ブロックレベル単一のアクションは、変数は、外部変数の影響を受けることなく、ブロックレベルのスコープに固有の回変数を宣言せてブロックレベルの範囲によって、存在します。
②ブロック内の任意の場所は、変数、このブロックレベルのスコープ、同じ名前の他のグローバル外部変数があるかどうかに関係なく、この変数を参照する任意の変数の名前を使用することを宣言する。
③デッドゾーンがある限り、現在のスコープに1は、変数が既に使用存在し、彼らが取得し、変数を使用する前に、コードの行の出現は、変数を宣言するだけまで、利用できませんされるように、自然の中で一時的なものです。
レッツ・標準化されたコード:④一時的なデッドゾーンを意味します。私たちは、スコープで始まるすべての変数を宣言します。
これと同時に、代入文がする、2は、constの一般定数を宣言するために使用され、定数の宣言は、読み取り専用属性を変更することはできません。ブロックレベルの範囲であり、一時的なデッドゾーンがある、の定義繰り返すことは許されない事前には変数宣言、存在しない、CONSTを聞かせ
(再割り当てが定数Aに訴えるであろう)A = 3; //キャッチされない例外TypeErrorがCONST A = 1 :定数、変数への代入(エラー:割り当て定数)
。3、varはによって特徴付けられるJS ES6、前宣言変数を使用する方法である:
(1)VaRは、関数宣言VARの使用において、関数のスコープ範囲であります変数は、この関数の変数のみ有効である
機能テスト(){
VAR 1 =。
console.log(); //この関数は、出力は出力が未定義の関数呼び出しではありません呼び出す1
}
console.log(A); //にReferenceError:定義されていません。
(2)予め変数宣言が存在する(変数はあらかじめ宣言が、次の手順が与えられないように変数は、事前に割り当てられていないが、の値が定義されていないが)
機能テスト(){
にconsole.log(); //未定義
VAR。3 = A / A = 3(暗黙宣言)
}