プリコンパイルプロセス

入門

また、プリコンパイル済みのとして知られている、コードがやるべき仕事の置換テキストです。それは仕事をする最初の全体をまとめたものです。

  • #で始まる命令の処理、例えば、コードの#includeを含むファイルをコピーし、#等のマクロ、条件付きコンパイルを、定義交換、それは準備作業を行うには、コンパイラのためのステージです。
    正式にコンパイルされ、あなたがプログラムのどこにでも配置することができます前に、プリコンパイル済みのメイン処理命令#開始し、演算命令は、コンパイラが進むことで、プリコンパイルを示しています。
    Cコンパイルシステムは、通常のプログラムのコンパイル前に、第一前処理します

前処理機能

Cの前処理機能は、主に以下の三つを提供します。

  1. マクロ定義。
  2. ファイルが含まれています。
  3. 条件付きコンパイル。

プリコンパイルされた(機能実行前)

  1. AOは、オブジェクト(アクティブオブジェクト)を作成します
  2. AOオブジェクトの属性値としてパラメータのルックアップ機能と関数宣言の変数、パラメータ名と変数名が定義されていません
  3. ユニティパラメータの引数、引数の値がパラメータに割り当てられ
  4. オブジェクトAOの属性は、関数参照であるとして関数宣言、関数名を探します

プリコンパイルされた(実行スクリプトの前にスクリプトコードブロック)

  1. (暗黙のグローバル変数宣言を含め、varは省略文)グローバル変数の宣言を検索、グローバル変数の傑作オブジェクトの属性値が定義されていません
  2. 関数宣言、グローバルオブジェクトのプロパティとして関数名、関数の参照値を探します

私はあなたに小さな事前にコンパイルのいくつかの例を挙げてみましょう:

        var a = 123;

		console.log(a); 

この時、彼は123の値を返します。

しかし、我々は場所を交換した場合:

      console.log(a);

      var a = 123;      

      我们得到的结果便会是undefined。

記載されています

= 10 A;
----> window.a = 10;
宣言されたすべてのグローバル変数、プロパティウィンドウのすべて
のウィンドウがやっている?
ウィンドウはグローバルドメインで
のvar A = 123;
初めてのグローバル変数コンピュータディスク内部へウィンドウがされ
ますが、彼は窓を見つけるために、内部に行くとき訪問したい場合は前に定義され
、実際にある
;のvar A = 123
- > window.a実際にアクセス可能window.aのではconsole.log()は
、ウィンドウのグローバル変数がありますローカル変数はありません!

プリコンパイルされた関数は、実行の瞬間前に発生します

function fn(a){

    console.log(a);
    
    var a = 123;
    
    console.log(a);
    
    function a(){}
    
    console.log(a);
    
    var b = function () {};
     
    console.log(b);
    
}
fn(1)

  1. 作成AOオブジェクト(実施期間のコンテキスト)アクティベーションオブジェクト
AO{ }

  1. 取得した変数は、パラメータを宣言し、変数のパラメータ名やAOなどの属性名は、ある
    未定義
AO{
	a:undefined,
	b:undefined,	
 }

  1. 引数とパラメータ団結
AO{
	a:1,
	b:undefined,	
 }

4.関数本体は、見つけるために、関数宣言の値が与えられ、それらの機能を

AO{
	a:function a(){},
	 //  把形参覆盖了  注意:**function a(){} 是函数声明 
	 只有它能提升; var b = function(){}这种是表达式**
	b:undefined,	
 }

この目的上AOが作成され
、その後直ちにAOテイクものの中からターゲットコンピュータの機能を実行
(){}第1印刷機能することを、
A 123が割り当てられ、第2の印刷は123であり、
そして関数A(以降)} {に第3回行い、印刷123、第四の印刷機能である({持ち上げられるので、最後の印刷機能がある(){}まで上昇されています}

    // }
function test(a,b){
    console.log(a);	 //function a(){};
    console.log(b);	//undefined
    var b = 234;
    console.log(b)	//234
    a = 123;
    console.log(a);	//123
    function a(){};
    var a ;
    b = 234;
    var b = function(){};
    console.log(a);	//123
    console.log(b);	//function(){};
}
test(1)

		1.  AO:{
    	//过程
 	   }
  		2.  AO:{
    	a:undefined;
    	b:undefined;
	    }
		3.  AO:{
    	a:1;
    	b:undefined;
   		 }
    	4.  AO:{
    	a:function a(){};
    	b:undefined;
   	 }
所以第一次输出的a是 function a(){};b 是undefined
b=234
	AO:{
    	a:function a(){};
    	b:234;
   	 }
   	 下个b输出就是234
 a = 123
 AO:{
    	a:123;
    	b:234;
   	 }
   	 	 下个a输出就是123

AOオブジェクトの中央を生成しません宣言は出力がそのまま影響します

 var b = function(){};
     AO:{
        	a:123;
        	b:function(){};
       	 }

发布了15 篇原创文章 · 获赞 0 · 访问量 94

おすすめ

転載: blog.csdn.net/weixin_45806273/article/details/103633525