作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的。
简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。
每个对象都会在其内部初始化⼀个属性,就是 prototype (原型)。
当我们访问⼀个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去 prototype ⾥找这个属性,这个prototype ⼜会有自己的 prototype ,于是就这样⼀直找下去,也就是我们平时所说的原型链的概念。
关系:instance.constructor.prototype = instance.__proto__
JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有⼀份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这⼀改变。
当我们需要⼀个属性的时, Javascript 引擎会先看当前对象中是否有这个属性, 如果没有就会查找他的 Prototype 对象是否有这个属性,如此递推下去,⼀直检索到 Object 内建对象。
事件代理( Event Delegation ),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。
原理:事件代理的原理是 DOM 元素的事件冒泡。
好处:可以提高性能、可以大量节省内存占用,减少事件注册,比如在 table 上代理所有 td 的 click 事件就非常棒,可以实现当新增子对象时无需再次对其绑定。
构造继承
原型继承
实例继承
拷贝继承
原型 prototype 机制或 apply 和 call 方法去实现继承较简单,建议使用构造函数与原型混合方式
function Parent(){ this.name = 'wang'; } function Child(){ this.age = 28; } Child.prototype = new Parent();//继承了Parent,通过原型 var demo = new Child(); alert(demo.age); alert(demo.name);//得到被继承的属性
this 总是指向函数的直接调⽤者(而非间接调用者)
如果有 new 关键字, this 指向 new 出来的那个对象
在事件中, this 指向触发这个事件的对象,特殊的是, IE 中的 attachEvent 中的 this 总是指向全局对象 Window
W3C 中定义事件的发生经历三个阶段:捕获阶段( capturing )、目标阶段( targetin )、冒泡阶段( bubbling )
冒泡型事件:当你使用事件冒泡时,子级元素先触发,父级元素后触发
捕获型事件:当你使用事件捕获时,父级元素先触发,子级元素后触发
DOM 事件流:同时支持两种事件模型:捕获型事件和冒泡型事件
阻止冒泡:在 W3C 中,使用 stopPropagation() 方法;在IE下设置 cancelBubble = true
阻止捕获:阻止事件的默认行为,例如 click - <a> 后的跳转。在 W3c 中,使用 preventDefault() 方法,在 IE 下设置 window.event.returnValue = false
创建⼀个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
属性和方法被加入到 this 引用的对象中
新创建的对象由 this 所引用,并且最后隐式的返回 this
defer,只支持 IE
async :
创建 script ,插⼊到 DOM 中,加载完毕后 callBack
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在
setTimeout 的第⼀个参数使用字符串而非函数的话,会引发内存泄漏
闭包使用不当
数据体积方面
JSON 相对于XML 来讲,数据的体积小,传递的速度更快些。
传输速度方面
JSON 的速度要远远快于 XML
说说你对AMD和Commonjs的理解webpack 是⼀个模块打包工具,你可以使用 webpack 管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包 Web 开发中所用到的 HTML 、Javascript 、 CSS 以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源, webpack 有对应的模块加载器。 webpack 模块打包器会分析模块间的依赖关系,最后生成了优化且合并后的静态资源。
CommonJS 是服务器端模块的规范, Node.js 采用了这个规范。 CommonJS 规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
AMD 规范则是非同步加载模块,允许指定回调函数。
AMD 推荐的风格通过返回⼀个对象做为模块对象, CommonJS 的风格通过对 module.exports 或 exports 的属性赋值来达到暴露模块对象的目的。
同源策略指的是:协议,域名,端口 相同,同源策略是⼀种安全协议
举例说明:比如⼀个黑客,他利用 Iframe 把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过 Javascript 读取到你的表单中 input 中的内容,这样用户名,密码就轻松到手了。
offsetWidth/offsetHeight 返回值包含 content + padding + border,效果与 e.getBoundingClientRect() 相同
clientWidth/clientHeight 返回值只包含 content + padding,如果有滚动条,也不包含滚动条
scrollWidth/scrollHeight 返回值包含 content + padding + 溢出内容的尺寸
对象字面量: var obj = {};
构造函数: var obj = new Object();
Object.create(): var obj = Object.create(Object.prototype);
png24 位的图⽚在 IE6 浏览器上出现背景,解决方案是做成 png8
浏览器默认的 margin 和 padding 不同。解决方案是加⼀个全局的 *{margin:0;padding:0;} 来统⼀,,但是全局效率很低,⼀般是如下这样解决:
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{ margin:0; padding:0; }
特点:
它是⼀个 Javascript 运行环境
依赖于 Chrome V8 引擎进行代码解释
事件驱动
非阻塞 I/O
单进程,单线程
缺点:
只支持单核 CPU ,不能充分利用 CPU
可靠性低,⼀旦代码某个环节崩溃,整个系统都崩溃