答:将全部的变量提高当当前做用域的顶部,赋值留在原地。意味着咱们能够在某个变量声明前就使用该变量。
虽然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; } ```