首页 > 编程语言 >JavaScript(上)

JavaScript(上)

时间:2022-08-21 11:58:55浏览次数:73  
标签:对象 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,属性
From: https://www.cnblogs.com/songyajie32C/p/16582660.html

相关文章

  • JavaScript使用reduce动态修改对象的属性名
      首先在添加到数组的时候,弄2个,把number冒号右边的是可以动态修改的,后面再使用reduce合并;    countryChildrenDouble的数据     合并之后twoO......
  • JavaScript中的运动(2)
    运动swiper插件(内置css和js)概述:swiper是一个开源的免费的一个滚动的组件(他可以运用于轮播图焦点图滑动效果等)内置的Demo(演示)他里面包含对应的css(以class的形式......
  • javascript:null和undefined的区别(chrome 104.0.5112.101)
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><body><buttononclick="test()">测试</button><script>functiontest......
  • JavaScript基础回顾
    变量声明var伪全局变量const常量(块级作用域)let块级作用域变量运算符及表达式算术运算 +-*/%++--逻辑运算&&(同true取最后一个false取第一个) ||(有true取......
  • 03.Javascript学习笔记2
    1.逻辑运算符在javascript中与或非对应的逻辑运算符是:&&||!consta=true;constb=false;console.log(a&&b);console.log(a||b);console.log......
  • javascript 数据类型
    值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、未定义(Undefined)、Symbol(ES6引入了一种新的原始数据类型,表示独一无二的值)。特殊的值:未定义(Undefined)引......
  • JavaScript之DOM操作-03
    6、DOM重点核心的总结文档对象模型(DocumentObjectModel,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C已经定义了一系列的DOM接口,通......
  • javascript 执行机制(同步、异步、微任务、宏任务)
    一、关于javascriptJS是一门单线程语言,这意味着所有的任务都需要排队,前一个任务结束才会执行后一个任务如果前一个任务耗时很长,后一个任务就不得不一直等着。这样所导致的......
  • 02.JavaScript学习笔记1
    JavaScript学习笔记1.强制类型转换当使用加号进行运算时,会将数字强制转换为字符串,然后再进行运算。constyear='1991';console.log(year+18);console.log(typeo......
  • JavaScript 性能优化技巧分享
    JavaScript作为当前最为常见的直译式脚本语言,已经广泛应用于Web应用开发中。为了提高Web应用的性能,从JavaScript的性能优化方向入手,会是一个很好的选择。本文从加载......