我爱编程

七至九章导读题

2018-06-11  本文已影响17人  空无一码

7.1 如何理解函数声明提升?
执行代码之前会读取函数声明,这意味着可以把函数声明放在调用它语句的后面。

7.2 匿名函数的name属性是?
空字符串

7.3 怎样实现对函数的递归调用最安全?
最好使用命名函数表达式,因为使用函数声明时进行引用赋值时,一旦将原来的函数名设置为null,就会导致错误;而使用arguments.callee代替函数名进行递归调用,在严格模式会不允许。

7.4什么是闭包?
闭包是指有权访问另一个函数作用域中变量的函数。

7.5创建闭包的常见方式?
在一个函数内部创建另一个函数。

7.6函数第一次调用时发生了什么?
创建一个执行环境及相应的作用域链,并把作用域链赋值给一个特殊的内部属性[[scope]],然后使用this,arguments和其他命名参数值来初始化函数的活动对象。

7.7作用域链的本质是?
一个指向变量对象的指针列表,它只引用但不实际包含变量对象。

7.8为何建议只在绝对必要时在考虑闭包?
闭包换携带包含它的函数的作用域,因此会比其他函数占用更多的内存,过度使用闭包会导致内存占用过多。

7.9匿名函数的this指向?
Window,因为它的执行环具有全局性。

7.10函数被调用时,其活动对象自动获取的特殊变量有?
this和arguments。

7.11闭包的副作用有?
只能取得函数中任何变量的最后一个值;
This指向不符合预期;
容易发生内存泄漏;

7.12如何看待重复声明变量?如何解决?
对后续声明视而不见,但会执行变量的初始化;模仿块级作用域。

7.13模仿块级作用域的技术一般用在哪?
全局作用域被用在函数外部,以限制向全局作用域中添加过多的变量和函数,从而避免命名冲突。

7.14什么是单例?
只有一个实例的对象

8.1BOM的事实标准是?
浏览器之间共有的对象

8.2window对象的双重角色是?
既是JS访问浏览器窗口的接口,又是ECMAScript规定的Global对象。

8.3定义全局变量与在window对象上直接定义属性的区别?
全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。

8.4引入self对象的目的是?
与top和parent对象对应起来。

8.5为何不建议给setTimeout()方法第一个参数传递字符串?
因为传递字符串可能导致性能损失。

8.6为何setTimeout()经过第二个参设置的时间后不一定会执行?
因为JS是一个单线程语言,一定时间内只能执行一段代码,如果任务队列为空,添加的代码会立即执行,若非空,就需要等前面的代码执行后再可执行。

8.7为何取消间歇调用比取消超时调用重要?
因为在不加干涉的情况下,间歇调用会一直执行下去

8.8为何location对象是BOM最有用的对象之一?
因为它提供了与当前窗口中加载文档的有关信息,还提供了一些导航功能。

8.9location对象有何特殊之处?
它既是window对象的属性,也是document对象的属性。

8.10为何要把reload()放在代码的最后一行?
因为位于reload()调用之后的代码可能会也可能不执行,这取决了网络延迟或系统资源等因素。

8.11BOM的对象有?
框架相关的top、parent、self对象
location对象、navigator对象、screen对象和history对象。

9.1什么时候使用客户端检测?
找不到更通用的方法之后,万不得以

9.2能力检测的目标是?
不是识别浏览器,而是识别浏览器的能力。

9.3能力检测需要注意什么?
尽量使用typeof进行检测,该特性是否按照适当方式进行。

9.4在实际开发中,如何应用能力检测?
应该将能力检测作为确定下一步解决方案的依据,而不是用来判断用户使用的是什么浏览器。

9.5怪癖检测的目标是?
识别浏览器的特殊行为,存在什么缺陷。

9.6用户代理适用的情形有?
不能直接准确使用能力检测或怪癖检测;
同一款浏览器在不同平台下具备不同的能力;
为了跟踪分析等目的。

9.7客户端检测方法有?
能力检测、怪癖检测和用户代理检测。

上一篇 下一篇

猜你喜欢

热点阅读