Java教程

JavaScript(上)

本文主要是介绍JavaScript(上),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
说说你对作用域链的理解
  • 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的。

  • 简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

JavaScript 原型、原型链 ?  有什么特点?
  • 每个对象都会在其内部初始化⼀个属性,就是 prototype (原型)。

  • 当我们访问⼀个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去 prototype ⾥找这个属性,这个prototype ⼜会有自己的 prototype ,于是就这样⼀直找下去,也就是我们平时所说的原型链的概念。

  • 关系:instance.constructor.prototype = instance.__proto__

  • 特点:
    • JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有⼀份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这⼀改变。

    • 当我们需要⼀个属性的时, Javascript 引擎会先看当前对象中是否有这个属性, 如果没有就会查找他的 Prototype 对象是否有这个属性,如此递推下去,⼀直检索到 Object 内建对象。

请解释什么是事件代理?
  • 事件代理( Event Delegation ),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。

  • 原理:事件代理的原理是 DOM 元素的事件冒泡。

  • 好处:可以提高性能、可以大量节省内存占用,减少事件注册,比如在 table 上代理所有 td 的 click 事件就非常棒,可以实现当新增子对象时无需再次对其绑定。

Javascript如何实现继承?
  • 构造继承

  • 原型继承

  • 实例继承

  • 拷贝继承

  • 原型 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 对象的理解
  • 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

new操作符具体干了什么呢?
  • 创建⼀个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型

  • 属性和方法被加入到 this 引用的对象中

  • 新创建的对象由 this 所引用,并且最后隐式的返回 this

异步加载JS的方式有哪些?
  • defer,只支持 IE

  • async :

  • 创建 script ,插⼊到 DOM 中,加载完毕后 callBack

那些操作会造成内存泄漏?
  • 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在

  • setTimeout 的第⼀个参数使用字符串而非函数的话,会引发内存泄漏

  • 闭包使用不当

XML和JSON的区别?
  • 数据体积方面

    • JSON 相对于XML 来讲,数据的体积小,传递的速度更快些。

  • 数据交互方面
    • JSON 与 JavaScript 的交互更加方便,更容易解析处理,更好的数据交互。
  • 数据描述方面
    • JSON 对数据的描述性比 XML 较差
  • 传输速度方面

    • JSON 的速度要远远快于 XML

谈谈你对webpack的看法

webpack 是⼀个模块打包工具,你可以使用 webpack 管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包 Web 开发中所用到的 HTML 、Javascript 、 CSS 以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源, webpack 有对应的模块加载器。 webpack 模块打包器会分析模块间的依赖关系,最后生成了优化且合并后的静态资源。

说说你对AMD和Commonjs的理解
  • CommonJS 是服务器端模块的规范, Node.js 采用了这个规范。 CommonJS 规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

  • AMD 规范则是非同步加载模块,允许指定回调函数。

  • AMD 推荐的风格通过返回⼀个对象做为模块对象, CommonJS 的风格通过对 module.exports 或 exports 的属性赋值来达到暴露模块对象的目的。

为什么要有同源限制?
  • 同源策略指的是:协议,域名,端口 相同,同源策略是⼀种安全协议

  • 举例说明:比如⼀个黑客,他利用 Iframe 把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过 Javascript 读取到你的表单中 input 中的内容,这样用户名,密码就轻松到手了。

offsetWidth/offsetHeight , clientWidth/clientHeight 与 scrollWidth/scrollHeight 的区别
  • offsetWidth/offsetHeight  返回值包含  content + padding + border,效果与 e.getBoundingClientRect() 相同

  • clientWidth/clientHeight 返回值只包含 content + padding,如果有滚动条,也不包含滚动条

  • scrollWidth/scrollHeight 返回值包含 content + padding + 溢出内容的尺寸

javascript 有哪些方法定义对象?
  • 对象字面量: 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; 
    }
  • IE 下, event 对象有 x , y 属性,但是没有 pageX , pageY 属性。  
  • Firefox 下, event 对象有 pageX , pageY 属性,但是没有 x , y 属性。
Node的应用场景
  • 特点:

    • 它是⼀个 Javascript 运行环境

    • 依赖于 Chrome V8 引擎进行代码解释

    • 事件驱动

    • 非阻塞 I/O

    • 单进程,单线程

  • 优点:
    • 高并发(最重要的优点)
  • 缺点:

    • 只支持单核 CPU ,不能充分利用 CPU

    • 可靠性低,⼀旦代码某个环节崩溃,整个系统都崩溃

 

这篇关于JavaScript(上)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!