答:將全部的變量提高噹噹前做用域的頂部,賦值留在原地。意味着咱們能夠在某個變量聲明前就使用該變量。
雖然JS會進行變量提高,但並不會執行真正的初始化過程。
按值傳遞:兩變量間賦值,或向函數中傳遞參數時,都是將原變量中的值複製一個副本給對方,修改一方,另外一方不受影響。
引用類型的對象之間相互賦值時,只是將地址賦值給了對方,所以改變原對象中的內容,因爲地址並未發生改變,所以也會引起新變量內容的改變。算法
答:指定瀏覽器按照嚴格模式去渲染。優點:強制開發者避免使用未聲明的變量。對於老版本的瀏覽器或者執行引擎會自動忽略該指令。瀏覽器
答:即某個事件不只會觸發當前元素,還會以嵌套順序傳遞到父元素中。
關於事件流:IE提出冒泡流,即由內到外;網景提出了捕獲流,即由外向內。
一個完整的JS事件流,是從window開始,最終回到window的一個過程。
事件流的三個階段:1.捕獲階段,2.目標階段,3.冒泡階段。函數
防止冒泡和捕獲: w3c的方法是e.stopPropagation(),IE則是使用e.cancelBubble = true ``` function stopBubble(e) { //若是提供了事件對象,則這是一個非IE瀏覽器 if ( e && e.stopPropagation ) { //所以它支持W3C的stopPropagation()方法 e.stopPropagation(); } else { //不然,咱們須要使用IE的方式來取消事件冒泡 window.event.cancelBubble = true; } } ``` 取消默認事件 w3c的方法是e.preventDefault(),IE則是使用e.returnValue = false; ``` //阻止瀏覽器的默認行爲 function stopDefault( e ) { //阻止默認瀏覽器動做(W3C) if ( e && e.preventDefault ){ e.preventDefault(); } else { //IE中阻止函數器默認動做的方式 window.event.returnValue = false; } return false; } ```