JS中常见算法问题

JS中常见算法问题

1. 阐述JS中的变量提升(声明提前)

答:将所有的变量提升当当前作用域的顶部,赋值留在原地。意味着我们可以在某个变量声明前就使用该变量。
虽然JS会进行变量提升,但并不会执行真正的初始化过程。
按值传递:两变量间赋值,或向函数中传递参数时,都是将原变量中的值复制一个副本给对方,修改一方,另一方不受影响。
引用类型的对象之间相互赋值时,只是将地址赋值给了对方,因此改变原对象中的内容,由于地址并未发生改变,因此也会引发新变量内容的改变。

2.阐述use strict;的作用

答:指定浏览器按照严格模式去渲染。优势:强制开发者避免使用未声明的变量。对于老版本的浏览器或者执行引擎会自动忽略该指令。

3.解释什么是事件冒泡,处理方式

答:即某个事件不仅会触发当前元素,还会以嵌套顺序传递到父元素中。
关于事件流: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; 
}
```

4.

posted @ 2019-03-13 07:20  南华秋水  阅读(342)  评论(0编辑  收藏  举报