ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript - スコープ、スコープ チェーン、および準備解析の詳細

JavaScript - スコープ、スコープ チェーン、および準備解析の詳細

php是最好的语言
php是最好的语言オリジナル
2018-08-03 09:33:351582ブラウズ

変数には、グローバル変数、ローカル変数があります

JavaScriptでは関数内で定義された変数がローカル変数です

スコープ: 変数の使用範囲であり、

はローカルスコープとグローバルに分かれていますスコープ ドメイン

js にはブロック レベルのスコープはありません ---この変数は中括弧の外側で使用できます

スコープ チェーン: からの変数の使用。内側から外側へ、レイヤー レイヤーごとの検索、検索後すぐに使用できます

var num=10; //作用域链 级别:0
   var num2=20;
   var str = "abc"
   function f1() {
     var num2=20;
     function f2() {
       var num3=30;
       console.log(num);
     }
     f2();
   }
   f1();

レイヤーごとの検索、0 レベルのスコープが検索された場合、変数がまだ見つからない場合、結果は次のようになりますエラー

事前解析: ブラウザがコードを解析する前に、変数と関数の宣言をスコープの先頭に進めます (プロモート)

(1) 変数のプロモート

以下の場合、変数は拡張されていますが、num の値は拡張されていません。結果は 未定義

//变量的提升
    console.log(num);
    var num=100;


//提升之后为:
var num;//变量的声明提前
console.log(num);
    var num=100;

(2) 関数宣言は拡張されており、コードは引き続き実行できます

//函数的声明被提前了
    f1();
    function f1() {
      console.log("这个函数,执行了");
    }

ただし、次の状況の場合、コードはエラーを報告します

f2();
    var f2=function () {
        console.log("小杨好帅哦");
    }

//声明提前后:
var f2;//为一个变量,undefind
f2();//undefind加括号是不被认可的,所以报错
    var f2=function () { 
        console.log("小杨好帅哦");
    }

エラーの報告を回避するには、コードを次のように変更できます:

var f2;
    f2=function () {
      console.log("小杨好帅哦");
    };
    f2();

関連記事:

JavaScript スコープとスコープ チェーンについて話しましょう

JavaScript スコープとスコープ チェーンの詳細な分析

関連ビデオ:


JavaScriptの3レベル連携例で遊んでみる

以上がJavaScript - スコープ、スコープ チェーン、および準備解析の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。