jsのブロックレベルスコープと関数スコープの違いは何ですか? (コード解析)
この記事でわかることは、JS におけるブロックレベルのスコープと関数スコープの違いについてです。 (コード分析) は一定の参考値がありますので、困っている方は参考にしていただければ幸いです。
なぜブロックスコープが必要なのですか?
ES5 にはグローバル スコープのみがあり、関数スコープはなく、ブロックレベルのスコープもないため、多くの不合理なシナリオが発生します。
最初のシナリオでは、内部変数が外部変数を上書きする可能性があります:
var tmp = new Date(); function f(){ console.log(tmp); if(false){ var tmp = "hello"; } } f(); // undefined
上記のコードでは、関数 f
が実行された後、出力結果は unknown
になります。変数 Promotion により、内側の tmp
変数が外側の tmp
変数を上書きするためです。 f
执行后,输出结果为undefined
,原因在于变量提升,导致内层的tmp
变量覆盖了外层的tmp
变量。
第二种场景,用来技术的循环变量泄露为全局变量:
var s = "hello"; for(var i=0;i<s.length;i++){ console.log(s[i]); } console.log(i); // 5
上面代码中,变量i
只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。
ES6的块级作用域
let
实际上为JavaScript新增了块级作用域
function f1(){ let n = 5; if(true){ let n = 10; } console.log(n); // 5 }
上面的函数有2个代码块,都声明了变量n
,运行后输出5。这表示外层代码块不受内层代码块的影响。如果使用var
定义变量n
{ {let insane = "hello"} console.log(insance); // 报错 }
i
はループを制御するためにのみ使用されますが、消えるわけではありませんループ終了後にグローバル変数にリークされます。 ES6 のブロックレベルのスコープlet
は実際に JavaScript に新しいブロックレベルのスコープを追加します{ let a = "hello"; {let a = "hello"} }
n< /code を宣言しています>、実行すると5が出力されます。これは、外側のコード ブロックが内側のコード ブロックの影響を受けないことを意味します。 <code>var
を使用して変数 n
を定義すると、最終的な出力値は 10 になります。 外側のスコープは内側のスコープの変数を読み取ることができません: // IIFE写法 (function(){ var tmp = ...; ... }()); // 块级作用域写法 { let tmp = ...; ... }
function f(){ ... swap(var_a,var_b); (function swap(a,b){ var tmp; tmp = a; a = b; b=tmp; })(var_a,var_b); }
function f(){ let a,b; ... { let tmp; tmp = a; a = b; b=tmp; } }
上記のコードのように、tmp は IIFE でカプセル化されているため、上位レベルの関数を汚染することはありません。また、ブロックレベルのスコープでは、それを IIEF にカプセル化する必要はなく、ブロックに直接入れるだけです。レベル。 rrreee
簡単に言うと、匿名関数をすぐに実行する目的は、ブロックレベルのスコープを確立することです。実際のブロックレベルのスコープがあるので、匿名関数をすぐに実行する必要はありません。 関連する推奨事項:
🎜🎜 js でのスコープと関数クロージャーの例の説明🎜🎜🎜🎜🎜PHP{} ブロックレベルのスコープの詳細な説明🎜🎜以上がjsのブロックレベルスコープと関数スコープの違いは何ですか? (コード解析)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull

この記事では、Javaのコレクションフレームワークの効果的な使用について説明します。 データ構造、パフォーマンスのニーズ、スレッドの安全性に基づいて、適切なコレクション(リスト、セット、マップ、キュー)の選択を強調しています。 コレクションの使用を効率的に最適化します

このチュートリアルでは、chart.jsを使用してパイ、リング、およびバブルチャートを作成する方法について説明します。以前は、4つのチャートタイプのchart.js:ラインチャートとバーチャート(チュートリアル2)、およびレーダーチャートと極地域チャート(チュートリアル3)を学びました。 パイとリングチャートを作成します パイチャートとリングチャートは、さまざまな部分に分かれている全体の割合を示すのに理想的です。たとえば、パイチャートを使用して、サファリの男性ライオン、女性ライオン、若いライオンの割合、または異なる候補者が選挙で受け取る票の割合を示すことができます。 パイチャートは、単一のパラメーターまたはデータセットの比較にのみ適しています。パイチャートのファンの角度はデータポイントの数値サイズに依存するため、パイチャートは値のあるエンティティをゼロ値で描画できないことに注意してください。これは、割合がゼロのエンティティを意味します
