【错题记录】JavaScript专项练习(篇五)

1.以下程序执行后返回的结果是
var p1 = {
  name:'小明',
  age:'12',
  action:function(where,doing){
   console.log(this.age + '岁的'+this.name + '在' + where + doing);
  }  
}
var p2 = {
  name:'小红',
  age:'15'
}
console.log(p1.action.call(p2,'操场上','运动'))

解析:答案 15岁的小红在操场上运动

call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了:
call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面 obj.myFun.call(db,‘广州’, …
,‘string’ ); apply的所有参数都必须放在一个数组里面传进去 obj.myFun.apply(db,[‘广州’, …,
‘string’ ]); bind除了返回是函数以外,它 的参数和call 一样。
当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等

可以观看此链接:尚硅谷_call和apply


2. a 的结果是什么
if(! "a" in window){
    var a = 1;
}
alert(a);

解析:答案:undefined

if(! “a” in window) 这句话代码的意思是:判断全局对象window中是否有变量a,如果没有变量a,就进入判断将a赋值为1,但由于变量的提升,上面代码等价于:

var a;
if (! "a" in window) {
  a = 1;
}
alert(a);

由于变量的提升,在执行这段代码之后,全局对象window中就已经存在a这个变量了,所以不能进入判断,对a进行赋值,所以a的值为undefined


3. JavaScript实现继承的方式,不正确的是
a. 原型链继承
b. 构造函数继承
c. 组合继承
d. 关联继承

解析:答案:d

点击👉JavaScript实现继承共6种方式:

原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承

4.以下代码执行后,a.x 和 b.x 的结果分别是
function A(x){
this.x = x;
}
A.prototype.x = 1;

function B(x){
this.x = x;
}
B.prototype = new A();
var a = new A(2), b = new B(3);
delete b.x;

解析:答案 2, undefined

B的prototype=new A(),想错的可能认为构造函数的x没有赋值就自动去原型找,错了,如果构造函数没有x才会去原型找,如果有x但是没有赋值,则是undefined,相当于x=undefined.就不会进入原型链


5.

NOSCRIPT标签用来定义在脚本未被执行时的替代内容


6. 下列哪些事件不支持冒泡
a. resize
b. click
c. blur
d. mouseleave

解析:答案 a c d
冒泡事件很多,不支持冒泡事件如下:

1.focus
2.blur
3.mouseenter
4.mouseleave
5.load
6.unload
7.resize


7. 下面有关浏览器中使用js跨域获取数据的描述,说法错误的是
a. 域名、端口相同,协议不同,属于相同的域
b. js可以使用jsonp进行跨域
c. 通过修改document.domain来跨子域
d. 使用window.name来进行跨域

解析:答案 a

只要 协议 、 域名 、 端口任何一个 不同, 都被当作是 不同 的域
在这里插入图片描述


8. 以下代码执行后,控制台的输出是
var a = 10;
function a() {}
console.log(typeof a)

解析:答案 "number"

函数提升大于变量提升,变量提升会提升到除函数声明的后面;变量提升,但是赋值不提升,代码等价于

function a() {}
var a;
a = 10;
console.log(typeof a)

9. 在浏览器控制台执行以下代码,结果是(后续理解…)

在这里插入图片描述
解析:答案 4400 4401 4399 4400


10. 下面哪个不是RegExp对象的方法
a. test
b. match
c. exec
d. compile

解析:答案 match

在这里插入图片描述


11.如果需要匹配包含文本的元素,用下面哪种方法来实现
a. text()
b. contains()
c. input()
d. attr(name)

解析:答案 b

四个方法都是jq中的方法,注意题干说的是匹配包含文本的元素

text()是设置或获取元素文本内容

contains()是检测元素是否含有相应的文本

input()选择器,选取表单元素

attr(name,value)属性操作,设置或返回被选元素的属性和属性值

12. document.getElementById(“info”).innerHTML 的值是
<div id=”info” style=”display:block”><p> 请填写 </p></div>

解析:答案 <p>请填写</p>
在这里插入图片描述


13. 如果不给cookie设置过期时间会怎么样

解析:答案 在浏览器会话结束时过期

cookie的有效时间默认为-1,如果不进行设置的话,就会默认在浏览器会话关闭时结束。

可以通过setMaxAge()方法设置cookie的生命期,当setMaxAge(0)表示立刻删除该浏览器上指定的cookie


14. 以下选项描述错误的是
a. 在原型上扩展的可枚举方法,会被for in循环出来
b. 使用object.defineProperty可向对象添加或者修改属性
c. 每个对象都有prototype属性,返回对象类型原型的引用
d. 通过hasOwnProperty可判断一个对象以及其原型链上是否具有指定名称的属性
e. 原型链是JS实现继承的一种模型
f. for循环是按顺序的,for in 循环是不一定按顺序的

解析:答案 d
《你不知道的JS》(上)119页:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


15. 下面哪些方法可以用作javascript异步模式的编程
a. 回调函数 (异步编程最基本的方法)
b. 事件监听
c. 发布/订阅
d. Promises对象

解析:答案 a b c d

先解释一下“同步模式”和“异步模式”:
(1)同步模式:就是后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的
(2)异步模式:完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的


JavaScript中实现异步编程模式的4种方法,回调函数、事件监听、发布/订阅、Promises对象:
(1)回调函数:这是异步编程最基本的方法,优点是简单、容易理解和部署,缺点是不利于代码的阅读和维护,各个部分之间高度耦合(Coupling),流程会很混乱,而且每个任务只能指定一个回调函数。 例:假定有两个函数f1和f2,后者等待前者的执行结果,如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数
(2)事件监听:任务的执行不取决于代码的顺序,而取决于某个事件是否发生。优点是比较容易理解,可以绑定多个事件,每个事件可以指定多个回调函数,而且可以”去耦合”(Decoupling),有利于实现模块化。缺点是整个程序都要变成事件驱动型,运行流程会变得很不清晰。例:为f1绑定一个事件,当f1发生done事件,就执行f2
(3)发布/订阅:我们假定,存在一个”信号中心”,某个任务执行完成,就向信号中心”发布”(publish)一个信号,其他任务可以向信号中心”订阅”(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做”发布/订阅模式”(publish-subscribe pattern),又称”观察者模式”(observer pattern)。这种方法的性质与”事件监听”类似,但是明显优于后者。因为我们可以通过查看”消息中心”,了解存在多少信号、每个信号有多少订阅者,从而监控程序的运行
(4)Promises对象:是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口。简单说,它的思想是,每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。回调函数变成了链式写法,程序的流程可以看得很清楚,而且有一整套的配套方法,可以实现许多强大的功能。例:f1的回调函数f2,f1().then(f2)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值