頁面中多個script塊之間的關係
一:函式宣告與函式定義表示式在函式呼叫間的區別
<script type="text/javascript">
doA();
var doA = function(argument) {
console.log('執行了')
}
</script>
結果:
<script type="text/javascript">
doA();
function doA(argument) {
console.log('執行了')
}
</script>
結果:執行了
結論:函式宣告在編譯期處理了函式宣告,但是函式定義表示式並沒有初始化與賦值。類似宣告瞭一個變數,但是變數沒有賦值。
二:多個script
之間對於變數的關係
JS是按照程式碼塊來進行編譯和執行的,程式碼塊間相互獨立,但變數和方法共享。
<script type="text/javascript">
function doA(argument) {
console.log('執行了')
}
</script>
<script type="text/javascript">
doA();
</script>
結果:執行了
**如果兩個函式塊之間更換位置,那就會報錯。
<script type="text/javascript">
var a = 0;
</script>
<script type="text/javascript">
console.log(a);
</script>
結果:0
**如果兩個函式塊之間更換位置,那就會報錯。
三:這樣就造成了一個問題,當我們一個頁面中引入多個js的時候,可能會造成全域性變數的汙染。
我們可以這麼做來避免:
<script type="text/javascript">
var a = 0;
</script>
<script type="text/javascript">
;(function(){
var a = 1;
console.log(a);
})();
console.log(a);
</script>
結果:1
0
或者我們直接用函式來做:
<script type="text/javascript">
function bigDoA(argument) {
var a = 0;
//其他程式碼
}
</script>
<script type="text/javascript">
function bigDoB(argument) {
var a = 0;
//其他程式碼
}
</script>
javaScript
直譯器在執行指令碼時,是按塊來執行的。通俗地說,就是瀏覽器在解析HTML文件流時,如果遇到一個<script>
標籤,則JavaScript
直譯器會等到這個程式碼塊都載入完後,先對程式碼塊進行預編譯,然後再執行。執行完畢後,瀏覽器會繼續解析下面的HTML文件流,同時JavaScript
直譯器也準備好處理下一個程式碼塊。
雖然說,JavaScript
是按塊執行的,但是不同塊都屬於同一個全域性作用域,也就是說,塊之間的變數和函式是可以共享的。 這也是第二段程式碼為什麼可以訪問前一個塊裡的a
的原因。
step 1. 讀入第一個程式碼塊。
step 2. 做語法分析,有錯則報語法錯誤(比如括號不匹配等),並跳轉到step5。
step 3. 對var變數和function定義做“預編譯處理”(永遠不會報錯的,因為只解析正確的宣告)。
step 4. 執行程式碼段,有錯則報錯(比如變數未定義)。
step 5. 如果還有下一個程式碼段,則讀入下一個程式碼段,重複step2。
step6. 結束。
相關文章
- 頁面中多個script塊之間方法與變數共享問題變數
- UML中類之間的關係
- 在多個JSP頁面之間傳遞引數JS
- QT中類之間的關係圖QT
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- 大話UML中類之間的關係
- CSS系列:CSS中盒子之間的關係CSS
- 類之間的關係
- 專案管理中各系統之間的關係專案管理
- 【java】類之間的關係Java
- Android 中Activity,Window和View之間的關係AndroidView
- unix中lun、pv、vg、lv等之間的關係
- Window、WindowManager、View 之間的關係View
- ODS與DW之間的關係
- tablespace和datafile之間的關係
- 不同層之間的物件關係物件
- 效能測試各個指標之間關係指標
- Laravel 中的多對多關係詳解Laravel
- Python中怎樣改變集合之間的關係?Python
- TLS與SSL之間關係TLS
- ps 與 svmon之間關係
- Window, WindowManager和WindowManagerService之間的關係
- git、github、gitlab之間的關係GithubGitlab
- UML類圖--類之間的關係
- Activity、View、Window之間關係的分析View
- .Net Framework各版本之間的關係Framework
- 瀏覽器多個標籤頁之間的通訊瀏覽器
- hibernate中多對多關係的維護
- 頁面之間傳遞資料
- rgw裡面使用者、bucket、使用者資料之間關係
- table/segment/extent/block之間關係BloC
- 面試之 一個頁面從輸入url到頁面載入顯示完成,中間都經歷了什麼面試
- Laravel 遠端一對多關係,中間表模型和關聯模型不能是同一個模型Laravel模型
- 思考 TPS 與 RT 之間的關係
- Java設計模式-類之間的關係Java設計模式
- 介面、抽象類、普通類之間的關係抽象
- 如何理解Nginx, WSGI, Flask之間的關係NginxFlask
- react、redux、react-redux之間的關係ReactRedux