ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript(上)

2022-08-21 12:01:57  阅读:227  来源: 互联网

标签:对象 JavaScript 原型 事件 模块 prototype 属性


说说你对作用域链的理解
  • 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 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,原型,事件,模块,prototype,属性
来源: https://www.cnblogs.com/songyajie32C/p/16582660.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有