js基础share
- 在window上声明的变量与全局变量的区别: window上的可以delete 全局的不行
- 递归函数应该始终用arguments.callee调用自身 因为函数名有可能会改变
- new操作符的作用:1.设置一个空对象2.设置对象的原型链3.用func.call(将构造函数内的逻辑跑一边)4.判断构造函数的返回值类型 如果是值类型返回obj 如果是引用类型则返回引用类型的对象
webWorker
``` // 外部环境 var worker = new Worker(“test.js”);
worker.addEventListener(“message”, function (e) { // 接收到了数据 console.log(e.data);//内部传出来的数据 });
worker.addEventListener(“error”, function(e) { // 发生了错误 });
// 向Worker环境内部发送数据 worker.postMessage(“hi”);
// 立即停止Worker,不管它在干什么
//内部环境: var a = 0;
self.addEventListener(“message”, function (e) { setInterval(function () { a++; postMessage(e.data + a); if (a == 10) { self.close();//内部终止 } }, 1000); }, false);
```
主要的点: 1.首先 引入一个内部worker 2.分别监听了message和errors事件,用来处理worker传出来的数据以及错误信息. 3.向worker内部发送一条数据 另外 不用担心此时test.js还没有加载进来的问题 这个浏览器会帮我们搞定 4.最后 把worker停掉 主线程是worker.terminate()内部线程是worker.close() worker内部如果要加载其他的脚本可以用 importScripts(‘a.js’) worker与主线程之间的通信内容 可以是文本 也可以是二进制文件 这种关系是拷贝关系 浏览器内部的机制是 先把数据串行化 然后把字符串发给worker 后者再将它还原
with 改变当前作用域 弊端:容易导致变量泄露
console.time(‘funcWith’) console.timeEnd(“funcWith”)
任务队列:
- 所有的同步任务都是在主线程上执行的 形成一个执行栈
- 主线程之外 还存在一个任务队列 .只要异步任务有了运行结果 就在任务队列之中放置一个事件
- 当主线程任务执行完毕后 会查询当前任务队列是否有事件 如果有 结束等待 开始执行
- 不断重复第三步
自定义任务
- 1.创建事件对象 var eve = document.createEvent(“build”)或者 new Event(“build”)
- 2.初始化事件 eve.initEvent(“build”) 接受三个参数 分别是事件的类型(字符串值) /canBubble 是否冒泡 /cancelable 是否可以用preventDefault方法取消事件 该步骤非必须 可以在第三步中声明
- 3.监听DOM元素对象事件
document.addEventListener> ("build", function() { alert("弹弹弹,弹走鱼尾纹~~"); });
- 4.// 触发, 即弹出文字 document.dispatchEvent(eve)
- 注意 new Event的参数是这个事件的名字 监听的事件名 dispatchEvent传入的是创建的事件对象
DOM0 DOM2 DOM3级事件处理程序
DOM0的事件具有极好的跨浏览器优势, 会以最快的速度绑定, 如果你通过DOM2绑定要等到JS运行, DOM0不用, 因为DOM0是写在元素上面的哇; 事件对象的eventPhase属性 可以确定事件当前正位于事件流的哪个阶段 只有在事件处理阶段 才会存在event对象 一旦事件执行完毕 event对象就会被销毁
DOM0事件是写在html上的事件 DOM2事件是addEventListener绑定的事件 只能有removeEventListener来移除. DOM3级事件在DOM2级事件的基础上添加了更多的事件类型,全部类型如下:
- UI事件,当用户与页面上的元素交互时触发,如:load、scroll
- 焦点事件,当元素获得或失去焦点时触发,如:blur、focus
- 鼠标事件,当用户通过鼠标在页面执行操作时触发如:dbclick、mouseup
- 滚轮事件,当使用鼠标滚轮或类似设备时触发,如:mousewheel
- 文本事件,当在文档中输入文本时触发,如:textInput
- 键盘事件,当用户通过键盘在页面上执行操作时触发,如:keydown、keypress
- 合成事件,当为IME(输入法编辑器)输入字符时触发,如:compositionstart
- 变动事件,当底层DOM结构发生变化时触发,如:DOMsubtreeModified
同时DOM3级事件也允许使用者自定义一些事件。
事件委托和代理
优点:1.减少内存的消耗 2.动态绑定元素 缺点:有一定的局限性 1.层级过多 可能会被某一层组织掉
最后说几句
如果有任何问题或建议,可以给我发邮件:156343782@qq.com.
欢迎交换友链,给我 发邮件:156343782@qq.com, 基本上可以做到秒加.
赞助
如果您觉得这篇文章对您有用,可以请作者喝一杯咖啡~~
微信:
支付宝: