區別:
1.放於函數外面的,放於循環外面的變量為全局變量,放於里面的為局部變量;
2.定義全局變量后,在函數外部可以取到該變量
3.看下面代碼
$a=10; show(); function show() { $a=1; global $a; $a=100; echo $a; }
//輸出 100
$a=10; show(); function show() { $a=1; global $a; echo $a; } //輸出 10
4.全局變量是一個完整的變量,可以連續記憶;局部變量不可以記憶;
5.js中定義全局變量,如下
聲明方式一:使用var(關鍵字)+變量名(標識符)的方式在function外部聲明,即為全局變量,否則在function聲明的是局部變量。
var test = 5; //全局變量 function a() { var cc=3; //局部變量 alert(test); } function b(){alert(test);}
聲明方式二:沒有使用var,直接給標識符test賦值,這樣會隱式的聲明了全局變量test。如果該語句放於一個function內,只有該function被調用后test才能變成全局變量,所以最好放於function外;
test = 5;//全局變量 function a() { aa=3; //全局變量但是在a()被調用之后 alert(test); }
聲明方式三:使用window.變量名定義為全局變量
window.test;
window.test = 5
5.php中聲明全局變量使用global;
6.在函數中,局部變量要想在外層輸出必須要求函數有返回值並且被接收或輸出函數。全局變量可直接輸出。
遞歸:
就是做夢,一層一層進入,一層一層退出,每次出來的時候,下一層和上一層之間的結果如果不是全局變量,無聯系。循環遍歷出所有的可能;
特點:代碼簡單,不易理解,計算機消耗資源大,運算效率低;
參考實例:磁盤文件數量
//方法1:使用全局變量 //定義兩個變量 $filenum=0; $dirnum=0; Num("../file"); function Num($url) { //聲明為全局變量 global $filenum; global $dirnum; //判斷給的路徑是不是文件m if(is_file($url)) { $filenum=1; return $filenum; exit(); } //如果是目錄,計算文件、文件夾數量 //獲取到該目錄下的子文件 $attr=glob($url."/*"); //遍歷所有的子文件 foreach($attr as $v) { //判斷子文件是文件? if(is_file($v)) { $filenum++; } else { $dirnum++; Num($v);//遞歸,自己調用自己 } } } echo "文件的數量:".$filenum."<br/>"; echo "文件夾的數量:".$dirnum;
//方法2:不使用全局變量獲取某路徑下文件的數量 function Num($url) { $filenum=0; if(is_file($url)) { $filenum++; exit; } $attr=glob($url."/*"); var_dump($attr); foreach($attr as $v) { if(is_file($v)) { $filenum++; } else {
//Num($v);//每一層的$filenum無聯系 $file=$filenum+Num($v); } } return $filenum; } echo Num("../ajax");