定时器&DOM

2017-09-08  本文已影响0人  1w1ng

下面这段代码输出结果是? 为什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
//输出的结果为1,3,2。因为setTimeout的延迟执行的结果,即使时间0也会把当前的函数放在最后执行,因此最后输出2。

下面这段代码输出结果是? 为什么?

var flag = true;
setTimeout(function(){
    flag = false;
},0)
while(flag){}
console.log(flag);
//没有输出,由于setTimeout 0 放在最后执行,那么不会产生任何影响,while循环里的flag一直为true,一直执行空语句,产生死循环,无法跳出或结束循环,因此没有输出。

实现一个节流函数

function throttle(fn, delay) {
    var timer = null
    return function(){
        clearTimeout(timer)
        timer = setTimeout(fn, delay)
    }
}

function fn(){
    console.log('hello world')
}

var fn2 = throttle(fn, 1000)
fn2()
fn2()
fn2()

简单解释单线程、任务队列的概念

参考:单线程模型

列出DOM 元素选取的 API

如何创建元素、如何添加元素

创建元素

createElement()

该方法用来生成HTML元素节点。参数为元素的标签名,如果传入大写的标签名,会被转为小写。如果参数带有尖括号(即<和>)或者是null,会报错。

var newDiv = document.createElement("div");

createTextNode()

该方法用来生成文本节点,参数为所要生成的文本节点的内容。

var newDiv = document.createElement("div");
var newContent = document.createTextNode("Hello");

createDocumentFragment()

该方法生成一个对象,存在于内存的DOM片段,但是不属于当前文档,常常用来生成较复杂的DOM结构,然后插入当前文档。

var docFragment = document.createDocumentFragment();

修改元素

appendChild()

在元素末尾添加元素

var newDiv = document.createElement("div");
var newContent = document.createTextNode("Hello");
newDiv.appendChild(newContent);

insertBefore()

在元素之前插入元素

var newDiv = document.createElement("div");
var newContent = document.createTextNode("Hello");
newDiv.insertBefore(newContent, newDiv.firstChild);

replaceChild()

接受两个参数:要插入的元素和要替换的元素

newDiv.replaceChild(newElement, oldElement);

removeChild()

删除元素

parentNode.removeChild(childNode);
上一篇下一篇

猜你喜欢

热点阅读