思います。
ウィンドウ グローバル オブジェクトを使用しているときに、次のようなことを行う可能性があります:の外側でもアクセスできるため、ブロック スコープの規則に従っていません。
注: 最新の JavaScript では、変数宣言に var.ではなく let と const を使用します。
申告は必要最小限の範囲内で行うこと最後に、スコープはコードの複雑さを管理するためのツールであることを覚えておいてください。宣言を置くスコープのレベルが高くなるほど、コードの複雑さが増すため、宣言を目標にするのが最善です。必要な最小のスコープに配置する必要があります。","image":"http://www.luping.net/uploads/20240822/172432476966c71ba1f35b1.jpg","datePublished":"2024-08-22T19:06:09+08:00","dateModified":"2024-08-22T19:06:09+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
このトピックは何度も取り上げられていますが、対処しようとしている問題の観点から (JavaScript を使用して) スコープとは何かについて話したいと思います。
アプリケーションのサイズが大きくなるにつれて、複雑さも増します。スコープは、そのような複雑さを管理するためのツールです。
7 に設定されたグローバル変数 radius と、「特別な」ボタンを返す関数 createSpecialButton() があるとしましょう。
let radius = 7; function createSpecialButton(radius) { return } const button = createSpecialButton(radius);
この関数は、特定の半径を持つボタンを返します。この場合は 7 に設定されています。現時点では、半径が何に設定されているかがわかっているので、コードに問題はありません。したがって、結果のボタンがどのようになるかがわかっています。のように見える。しかし、両方とも radius 変数に依存するさらに 2 つの関数を追加するとどうなるでしょうか?コードは次のようになります:
let radius = 7; function createSpecialButton() { return } function profileButton() { radius = 10; return } function registrationButton() { radius = 16; return } const profileButton = profileButton(); const registrationButton = registrationButton(); const button = createSpecialButton();
この変更を行った後、createSpecialButton() を呼び出すときの半径の値はどうなりますか? 16 と推測したなら、正解です。
関数を 2 つ追加しただけで、コードの複雑さが大幅に増加し、現在は、無関係な複数のコードが同じ依存関係に依存している世界に住んでいます。ここで、これがはるかに大規模なフルスタック アプリケーションであったと想像してください。特定の状態の部分がどこから来たのか、バグが発生したときにどのように修正するかを推論するのはすぐに困難になります。
これを修正するには、関数ごとに個別の半径変数を定義できます:
function createSpecialButton() { const radius = 7; return } function profileButton() { const radius = 10; return } function registrationButton() { const radius = 16; return } const profileButton = profileButton(); const registrationButton = registrationButton(); const button = createSpecialButton();
この変更を見て、「まあ、分かったが、コードが増えた - それは正しくないようだ」と思うかもしれません。その通りです。コードの量は増えていますが、コードが減って保守性が低下するのであれば、コードが少ない方が良いというわけではありません。私たちが行った変更により、コードの保守性が向上します。これは常に良いことです。
JavaScript のスコープの種類を使用して宣言をグローバル スコープに置くことができます。
たとえば、script タグを使用すると、次のようなことができます:
また、MDN は「グローバル スコープ」の定義を「スクリプト モードで実行されるすべてのコードのデフォルト スコープ」と表現しています。彼らが言及しているのは上の例だと
思います。
ウィンドウ グローバル オブジェクトを使用しているときに、次のようなことを行う可能性があります:
モジュールのスコープ
たとえば、user.ts では、両方の関数が変数名にアクセスできます。
ただし、このバージョンの user.ts では、accessName() のみが変数名にアクセスできます:
これらのモジュールでは何もエクスポートされないことに注意してください。言い換えれば、他のモジュールのコードはこのコードについて知る方法がないため、それをインポートして使用することはできません。ただし、これは変更できます:
これで、両方の関数がエクスポートされ、他のモジュールで使用できるようになります。これは、最初に説明したグローバル スコープの概念とは技術的に異なりますが、あるモジュールから別のモジュールにコードをインポートすることで、アプリケーション全体でコードを利用できるようにするという点では似ています。
機能範囲
これを実行してみてください。greetAgain() はエラーになります。読み取ろうとしている name 変数は、greet() のコンテキスト (つまり、「スコープ」) 内にのみ存在するためです。
注: これは「ローカル スコープ」と呼ばれる場合があります。
ブロックスコープ
上記の例では、1) {} 内にコードを配置するとコード ブロックが作成されることがわかります。 2) let と const を使用して定義された変数は、そのコード ブロック内でのみアクセスできます。 3) var で作成された変数は、{}.
の外側でもアクセスできるため、ブロック スコープの規則に従っていません。
注: 最新の JavaScript では、変数宣言に var.ではなく let と const を使用します。
申告は必要最小限の範囲内で行うこと
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3