2018阿里巴巴前端面试题,附详细答案(3)

IT就业
0 172

9.为什么 var 可以重复声明? 当我们执行代码时,我们可以简单的理解为新变量分配一块儿内存,命名为a,并赋值为2,但在运行的时候编译器与引擎还会进行两项额外的操作:判断变量是否已经声明: 首先编译器对代码进行分析拆解,从左至右遇见var a,则编译器会询问作用域是否已经存在叫 a 的变量了,如果不存在,则招呼作用域声明一个新的变量a,若已经存在,则忽略var继续向下编译,这时a = 2被编译成可执行的代码供引擎使用。 引擎遇见a=2时同样会询问在当前的作用域下是否有变量a,若存在,则将a赋值为2(由于第一步编译器忽略了重复声明的var,且作用域中已经有a,所以重复声明会发生值得覆盖而并不会报错)。若不存在,则顺着作用域链向上查找,若最终找到了变量a则将其赋值2,若没有找到,则招呼作用域声明一个变量a并赋值为2。 10.封装一个函数,参数是定时器的时间,.then执行回调函数。 function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); } 11.一个关于 this 指向的问题 差不多应该是这样,记不太清了 obj = { name: 'a', getName : function () { console.log(this.name); } } var fn = obj.getName obj.getName() var fn2 = obj.getName() fn() fn2() 12.CommonJS 中的 require/exports 和 ES6 中的 import/export 区别? CommonJS 模块的重要特性是加载时执行,即脚本代码在 require 的时候,就会全部执行。一旦出现某个模块被”循环加载”,就只输出已经执行的部分,还未执行的部分不会输出。 ES6 模块是动态引用,如果使用 import 从一个模块加载变量,那些变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。 import/export 最终都是编译为 require/exports 来执行的。 CommonJS 规范规定,每个模块内部,module 变量代表当前模块。这个变量是一个对象,它的 exports 属性(即 module.exports )是对外的接口。加载某个模块,其实是加载该模块的 module.exports 属性。 export 命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。 13.一行代码实现数组去重? [...new Set([1,2,3,1,'a',1,'a'])] 14.使用addEventListener点击li弹出内容,并且动态添加li之后有效 <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> 内容来源于网络,如需系统学习前端知识,请戳链接: a(http://xue.ujiuye.com/class-36710/)[http://xue.ujiuye.com/class-36710/]

举报 回复
  • 还没有人回答..
常见问题
公务员面试过程中可以透露自己的学历、专业、籍贯等个人信息吗 6098
国家公务员考试报名费已经缴了,但由于个人原因不去参加笔试,会不会有什么不好的影响 6205
教师资格证现场确认需要哪些资料,在籍学习证明去哪开 5991
公务员报考 2812
没有取得学位证对报考公务员、事业单位、国企及银行会受到怎样的影响?? 5522
国考个人信息 2776
国考报名 2623
国考报名人事档案存放单位写错一个字怎么办 5743
公务员国考中金融学类专业包括哪些? 6037
UI设计好学吗? 749