標籤:obj 全域變數 find 自己的 nbsp scope lock test 因此
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 </head> 7 <body> 8 <script type="text/javascript"> 9 /*10 一個變數的範圍(scope)是程式原始碼中定義這個變數11 的地區。12 全域變數擁有全域範圍,然而在函數內聲明的變數13 只在函數體內定義,它們是局部變數,範圍是局部性的14 函數參數也是局部變數,它們只在函數體內定義*/15 16 //局部變數的優先順序高於同名的全域變數17 //---->如果在函數內聲明的一個局部變數或者函數參數中帶有變數和全域變數重名18 //---->全域變數就被局部變數所遮蓋19 var scope="global";//聲明一個全域變數20 function checkscope() {21 22 var scope="local";//聲明同一個局部變數23 return scope;//返回局部變數的值,而不是全域變數的值24 25 26 }27 checkscope()28 29 console.log(checkscope()) //"local"30 31 //--->1--全域範圍編寫代碼時可以不寫var語句 ,聲明局部變數時則必須使用var語句32 scope="global";// 聲明一個全域變數,甚至不用var33 function checkscope2(){34 scope="local"; //修改了全域變數35 myscope="local" //這裡顯示地聲明了一個新的全域變數36 return [scope,myscope]; //返回兩個值37 }38 checkscope2()//函數調用39 console.log(checkscope2()) //=>["local","local"]40 //---->2--函數定義是可以嵌套的,由於每個函數都有它自己的範圍 ,因此會出現幾個局部作用嵌套的情況41 42 var scope="global scope"; //全域變數43 function checkscope(){44 var scope="local scope";//局部變數45 function nested(){46 var scope ="nested scope";//嵌套範圍內的局部變數47 return scope; //返回當前範圍內的值48 49 }50 nested() //嵌套函數調用51 52 }53 checkscope() //=>"嵌套範圍"54 55 /*56 函數範圍和聲明提前57 1--->類似C 語言的編程--花括弧內的每一段代碼都具有各自的範圍58 而且變數在聲明它們的程式碼片段之外是不可見的,稱為塊級範圍(block scope)59 javascript中沒有塊級範圍60 javaScript取而代之使用了函數範圍:61 變數在聲明它們的函數體以及這個函數體嵌套任意函數體內都是具有定義的62 63 */64 //----1-->65 function test(o){66 var i=0; //i 在整個函數體內均是有定義的67 if (typeof o=="object"){68 var j=0; //j在函數體內是有定義的,不僅僅是在這個程式碼片段內69 for(var k=0;k<10;k++){ //k在函數體內是有定義的,不僅僅是在內迴圈70 console.log(k);//輸出數字0~971 72 73 }74 75 console.log(k); //k已經定義了,輸出1076 }77 console.log(j); //j已經定義了,但可能沒初始化78 }79 //javascript的函數範圍是指在函數內聲明的所有變數在函數體內始終可見80 //意味著變數在聲明之前甚至已經可用,javascript 這個特性被非正式的稱為聲明提前81 82 // javascript 函數裡聲明所有變數都被提前至函數體內部83 var scope="global";84 function f(){85 86 console.log(scope);//輸出undefind ,"而不是“global"87 var scope="local";//變數在這裡賦初始值,但變數本身在函數體內任何地方均是有定義的88 console.log(scope);//輸出“local”89 }90 91 92 </script>93 94 </body>95 </html>
javascript變數範圍