變量必須先聲明后使用,js中函數可以先使用后聲明是因為函數有預加載過程!
內部環境可以訪問外部環境的變量,反之不然 環境:每個函數內部都是一個環境,最外邊是全局環境。 兩種類型:函數環境、全局環境
變量的作用域是聲明時決定的,而不是運行時
<script>var ip="127";function f1(){ console.log("ip地址:"+ip);}function f2(){ var ip="192"; f1();}f2(); //ip地址:127</script><script>//再寫一個分析function n1(){ var ip="127"; console.log("ip地址:"+ip);}function n2(){ var ip="192"; n1();}n2(); //ip地址:127</script>訪問是系統唯一變量, 調用時取決于變量的當時信息
<script>var ip="127";function s1(){ console.log("ip地址:"+ip);}s1(); //ip地址:127var ip="192";s1(); //ip地址:192</script>AO: Active Object 活動對象(抽象的)
執行環境: js代碼執行是有環境的(全局環境、函數內部環境) 環境定義了其有權訪問的其他數據 環境有一個與之關聯的“活動對象AO” 環境中所有的變量和函數都是活動對象AO的成員 全局環境是最外圍的執行環境,活動對象是window對象 執行環境中的代碼執行完畢后就被銷毀
圖解: 每個環境都通過AO定義了其權訪問的一些數據。
以上程序代碼分析 在f3最里邊環境獲得一個變量信息: 首先在本環境獲得,如果沒有 其次像外部環境獲得 其次再像外部環境獲得 ….. 直到找到全局環境為止 通過以上分析,變量尋找看似一個“動態過程”,實際其是一個”固態過程” 每個環境都有AO活動對象 每個環境可以訪問的信息早早地已經“固化”為AO的成員信息
四種類型:內部變量>>>內部函數>>>形參>>>外部變量(變量/函數/形參) 同名的變量和函數同時存在,”變量”會”覆蓋”函數
<script>var yuyan = "php"; //①外部變量function f1(){ function f2(yuyan){ //②形參 var yuyan = "html"; //④內部變量 console.log('語言:'+yuyan); function yuyan(){ //③內部函數 console.log('very good'); } } f2('java');}f1(); //語言:html</script>全局變量 聲明: ① 在函數外部聲明的變量 ② 在函數內部不使用var聲明的變量(前提是函數執行之后才起作用)
全局變量 是活動對象window的成員信息。 在訪問的時候,window是否設置都可以,如果設置window可以提高代碼可讀性
局部變量 聲明: 在函數內部通過var聲明的變量就是局部變量。
局部變量 相對概念上,在一定范圍內可以看做是“全局變量”。 其在 本環境、內部環境、內部深層環境 都可以被訪問。
新聞熱點
疑難解答