在學習vue相關課程中,有一次跟著老師敲**,寫出了如下**:
var child =,點選一次執行3次可以理解,因為每個子元件都給prototype裡的$bus匯流排push了自己的事件處理函式,但理論上來講,每個元件例項化的過程中,都會呼叫自己的mounted鉤子,在鉤子裡因為閉包的存在,形成可儲存的作用域,所以,每個例項都有自己獨立的的context( 如counter ),即:應該執行3次,但counter不應該累加,應該出現3個'you clicked 1 times'。},mounted() );}};
覺得迷糊,我自己又按照自己的理解寫了一遍**,執行,結果好好的,就是上述期待效果,問題在哪呢?
將兩個檔案逐行對比後,定位到了問題:
正確的版本
出問題的版本
看到此處,豁然開朗,所以不加var的變數都綁在了全域性window物件上,不會再根據mounted鉤子函式的執行單獨建立作用域了,所有child例項push到$bus裡的事件處理函式訪問的都是window.counter,所以數值累加就是正常表現了。
看來js**中var的使用不容小覷,對於宣告的任何乙個變數都要做到胸有成竹,是不是要綁在window上做全域性用?如果不是,一定要加var,使其在自身作用域內執行,防止汙染全域性。
JS中用var宣告變數和不用var宣告變數的區別
閱前須知 作用域 分為全域性和區域性 函式會開闢自己的作用域 或 空間 或 過程級 變數宣告 變數在指令碼中的第一次出現是在宣告中。變數在第一次用到時就設定於記憶體中,便於後來在指令碼中引用。使用變數之前先進行宣告。可以使用 var 關鍵字來進行變數宣告。var count 單個宣告。var cou...
JS中的Var語法
在學習變數之前,我們先要清楚什麼是資料,以及資料的儲存地方。資料 乙個軟體開啟後,介面上有很多的資料,也叫狀態 這個狀態可以儲存在兩個地方,乙個是記憶體,乙個是硬碟。記憶體中的資料,一斷電,資料就沒了,還有乙個地方,也可以儲存資料,是硬碟,硬碟上的資料斷電是不會丟失的。在js中,如何定義變數 var...
JS中用var宣告變數和不用的區別
在js中宣告變數時用var和不用var有什麼區別,我查閱了很多的資料和書籍再加上我自己的理解來講述一下我自己的看法。在函式內部宣告變數 在函式內部如果用var宣告變數和不用時有很大差別,用var宣告的是區域性變數,在函式外部訪問這個變數是訪問不到的,沒var宣告的是全域性變數。在函式外部是可以訪問到...