js
js
莱纳你坐啊
天之苍苍,其正色邪?
展开
-
ES6之let,const
var的声明提升 var声明及其变量提升:变量的声明提升到函数顶部,但是初始化依旧停留在原地执行。(详情参考js预编译文章) function A(){ if(true){ var a = 10; } } //预编译阶段变量提升: function A(){ var a; if(true){ a = 10; } } 块级声明 块级声明用于声明指定块的作用域之外无法访问的变量: 函数内部 块中({}之间的区域) let let声明不被提升,可以把变量的作用域限制在当前代码块中。原创 2020-09-22 16:08:03 · 126 阅读 · 0 评论 -
跨域
产生跨域的原因 浏览器同源策略 同源策略/SOP(Same origin policy),是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 解决方案 通过jsonp跨域 document.domain + iframe跨域 location.hash + iframe window.name + iframe跨域 postMessage跨域 跨域资源共享(CORS)原创 2020-09-22 10:04:43 · 246 阅读 · 0 评论 -
原型/原型链
每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象。这个对象包含特定类型的所有实例的属性和方法。也就是,prototype是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象,可以让所有对象实例共享它所包含的属性和方法。 理解原型对象 只要创建了一个函数,该函数就会拥有一个prototype属性,指向该函数的原型对象。默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性是一个指向prototype所在函数的指针。 创建了自定义构造原创 2020-09-17 16:22:42 · 114 阅读 · 0 评论 -
对象创建/继承
工厂模式 函数封装创建对象的细节 function Person(nam, age) { var o = new Object(); o.name = name; o.age = age; o.getName = function () { alert(this.name) }; return o; }原创 2020-09-16 14:27:43 · 103 阅读 · 0 评论 -
js运行机制 与 浏览器进程
浏览器是多进程的,打开一个tab页就是打开一个进程。进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。页面的渲染,JS的执行,事件的循环,都在一个进程(浏览器内核(渲染进程))内进行。所以一个tab页的进程内有很多线程来处理这些操作。 渲染进程 GPU渲染线程 负责渲染浏览器界面,解析HTML,CSS,构建DOM树和Render树,回流和重绘等。 当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。 GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时.原创 2020-09-15 14:51:16 · 432 阅读 · 0 评论 -
手写call,apply,bind
myCall 函数调用此方法,所以放置到函数原型上 第一个参数为要绑定的this,由于call函数接收任意数量参数,使用ES6中的不定参数(…args)来接受参数 Function.prototype.myCall = function(context,...args){ } 如何把this绑定到context上呢:函数的this指向调用函数的人身上,所以可以让context调用要绑定的函数,这样函数的this指向调用函数者身上就指向了context 如何获取要绑定的函数呢:上面提到原创 2020-09-12 20:49:58 · 91 阅读 · 0 评论 -
Ajax封装
函数能够像jQuery一样,传入自定义配置的ajax参数,函数参数传入参数配置对象 函数内部有默认的配置参数,默认get请求,默认表单提交数据格式 合并传入的配置参数与默认参数 处理传入的数据,拼接成?x=x&y=y形式 如果是get方法,数据加到url上 初始化xhr对象 判断请求方式,如果是post请求,首先设置请求头的媒体类型信息,然后判断其格式,若是json形式则发送转换的json格式数据;get请求直接发送 响应监听,获取响应头媒体类型,并判断,如果是返回json则转换成j对象 判断响应.原创 2020-09-12 20:28:26 · 71 阅读 · 0 评论