最近es6の知識を勉強し直しました。動画や情報をもとに自分なりの理解をメモしてみましたので、皆さんのお役に立てれば幸いです。 #####################範囲?
ほぼすべてのプログラミング言語の最も基本的なモデルの 1 つは、変数に値を格納し、これらの値を取得および変更する機能です。変数と値の取得 この機能はプログラムにステータスを与えます。このような概念がないと、プログラムはいくつかのタスクを実行できますが、そのタスクは非常に限定され、あまり面白くなくなります。しかし、これらの変数はどこに保存され、どのように読み取られるのでしょうか?この目標を達成するには、スコープ、#[関連コースの推奨事項: JavaScript ビデオ チュートリアル ]## というルールを策定する必要があります。 # スコープの主な種類は何ですか?
作用域主要分为全局作用域、函数作用域、动态作用域、块级作用域;
タイプ
グローバル スコープ | |
---|---|
{} | |
this | |
1. 実行環境はグローバル スコープと関数スコープに分かれています; | 2. 新しい実行環境に入るたびに、変数や関数を検索するためのスコープが作成されます。 | 3. 関数のローカル環境は関数スコープ内の変数にアクセスできるだけでなく、親環境やグローバル環境にもアクセスできます;
グローバル スコープ
関数の外で定義された変数はグローバル変数です。グローバル変数にはグローバル スコープがあります。Web ページ内のすべてのスクリプトと関数を使用できます。
変数が関数内で (var キーワードを使用せずに) 宣言されていない場合、その変数はグローバル変数です。// 以下实例中 carName 在函数内,但是为全局变量。 // 此处可调用 carName 变量 function myFunction() { carName = "Volvo"; // 此处可调用 carName 变量 }ログイン後にコピー
関数内やコードブロック内で定義されていない変数は、window/global の属性として存在します。var で定義されていない変数は削除できますが、グローバル変数は削除できません。
関数スコープ
関数内で宣言された変数は関数スコープと呼ばれます。関数内の変数には外部から
直接アクセスできませんが、return または Closure を通じてアクセスできます。
// 此处不能调用 carName 变量 function myFunction() { let carName = "Volvo"; // 函数内可调用 carName 变量 } <!--rerurn--> function myFunction() { let carName = "Volvo"; rerurn carName; // 函数内可调用 carName 变量 } let fn=myFunction()//Volvo; <!--闭包--> function myFunction() { let carName = "Volvo"; function getName(){ console.log(carName) } return getName(); // 函数内可调用 carName 变量 } myFunction() //Volvo
ブロックレベル スコープ
es6 が登場したら、let コマンドを使用して新しいブロックレベル スコープを追加します。外側のスコープは内側のスコープを取得できません。非常に安全かつ明確であり、外層と内層で同じ変数名を使用しても相互に干渉しません。
关于暂时性死区 * 在使用let命令声明变量之前,该变量都是不可用的。如果去调用这种情况被称为暂时性死区。 let 特性 * let不存在变量提升 * let不允许重复声明 * 拥有块级作用域 * 不可以使用window去调用 const 特性 * 定义常量 * 不允许修改常量的值 * 不允许先声明后赋值 * 同上 if(1){ let a = 1 console.log(a) }
動的スコープ
動的スコープでは、関数とスコープがどこでどのように宣言されるかは関係なく、どこから呼び出されるかだけが問題となります。このメカニズムはこれと非常によく似ています;実際には、js から拡張される字句スコープ (静的スコープ) があります。字句スコープの反対は動的スコープです。関数のスコープは、関数が#let name='youzi';
function getName(){
let name="tuzi";
function getAge(){
console.log(name)
}
return getAge();
}
getName() //tuzi
JavaScript では字句スコープが使用され、関数のスコープは関数の定義時に決定されます。 <!-- 这段代码执行就是按照词法作用域去执行的。在函数定义时已经被决定了 -->
let name='youzi';
function getName(){
console.log(name)
}
function getAge(){
let name='tuzi';
getName()
}
getAge() //youzi
列から引用したものです。ぜひ学習してください。
以上がes6 スコープの詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。