8.this

1.举例说说apply方法和call方法的作用和区别

2.读下面代码,写程序结果

function identify () {return this.name.toUpperCase()
}function speek () {var greeting = 'hello, 我是' + identify.call(this)console.log(greeting)
}var p1 = {name: 'xiaoHong'
}
var p2 = {name: 'XiaoLi'
}
identify.call(p1)   // 输出?
identify.call(p2)   // 输出?
speek.call(p1)      // 输出?
speek.call(p2)      // 输出?

3.读下面代码,写程序结果

function foo (num) {console.log('foo:' + num)this.count++
}
foo.count = 0
for (var i = 0; i < 10; i++) {if ( i > 5) {foo(i)}
}
console.log('foo.count被调用了多少次?:'+foo.count)

4.this到底是什么?

1、this的绑定和函数的声明位置没有关系,只取决于函数的调用方式
2、当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包含函数在哪里调用、函数的调用方式、传入的参数等信息,this就是这个活动记录的一个属性,会在函数执行的过程中用到

5.读下面代码,写出运行结果(知识点,默认绑定)

function foo () {console.log(this.a)
}
var a = 2
foo()   //输出?
function foo () {"use strict"console.log(this.a)
}
var a = 2
foo()  // 输出?
function foo () {console.log(this.a)
}
var a = 2
;(function () {"use strict"foo()
})()

6.读下面代码,写出运行结果(知识点,隐式绑定)

function foo () {console.log(this.a)
}
var obj = {a: 2,foo: foo
}
obj.foo()  // 输出?
function foo () {console.log(this.a)
}
var obj2 = {a: 42,foo: foo
}
var obj1 = {a: 2,obj2: obj2
}
obj1.obj2.foo() //输出?

7.读下面代码,写出运行结果(知识点,绑定丢失)

function foo () {console.log(this.a)
}
var obj = {a: 2,foo: foo
}
var bar = obj.foo
var a = '我是全局属性a'
bar()  //输出?
function foo () {console.log(this.a)
}
function doFoo (fn) {fn()
}
var obj = {a: 2,foo: foo
}
var a = '我是全局变量a'
doFoo(obj.foo)  //输出?
function foo () {console.log(this.a)
}
var obj = {a: 2,foo: foo
}
var a = '我是全局变量a'
setTimeout(obj.foo, 100) // 输出

8.读下面代码,写出运行结果(知识点,call)

function foo () {console.log(this.a)
}
var obj = {a: 2
}
foo.call(obj)  //输出多少?

思考,如何解决绑定丢失问题?直接使用call方法能不能实现?

9.读下面代码,写出运行结果(知识点,硬绑定)

function foo (something) {console.log(this.a, something)return this.a + something
}
var obj = {a: 2
}
var bar = function () {return foo.apply(obj, arguments)
}
var b = bar(3)  //输出多少?
console.log(b)  //输出多少?

10.简单写一个通用的辅助函数bind

function foo (something) {console.log(this.a, something)return this.a + something
}function bind(fn, obj) {// 补充代码...
}
var obj = {a: 2
}
var bar = bind(foo, obj)var b = bar(3)  // 2 3
console.log(b)  // 5

11.读下面代码,写出运行结果(知识点,new绑定)

function foo (a) {this.a = a
}
var bar = new foo(2)
console.log(bar.a) //输出多少?
12.读下面代码,写出运行结果(知识点,箭头函数的this)function foo () {return (a) => {console.log(this.a)}
}
var obj1 = {a: 2
}
var obj2 = {a: 3
}
var bar = foo.call(obj1)
bar.call(obj2)  //输出多少?
function foo() {setTimeout(() => {console.log(this.a)}, 100)
}
var obj = {a: 2
}
foo.call(obj)  //输出多少?

13.总结判断this指向的方法

1. 函数是否在new中调用?如果是的话this指向的是新创建的对象2.函数是否通过call、apply或者硬绑定调用?如果是的话,this指向的是指定的对象3.函数是否在某个上下文对象中调用?如果是的话,this指向的是那个上下文对象4.如果都不是的话,使用默认绑定,如果在严格模式下,绑定到undefined,否则指向全局对象

螺钉课堂视频课程地址:http://edu.nodeing.com

js基础练习题(3)相关推荐

  1. js基础练习题(1)

    1.字符串 视频教程地址: js基础练习题 1.如何连接两个或者两个以上字符串? var cssname = 'box' var num = 1 var html = '<div class=& ...

  2. js基础练习题 二次封装函数

    题目描述 已知函数 fn 执行需要 3 个参数.请实现函数 partial,调用之后满足如下条件: 1.返回一个函数 result,该函数接受一个参数 2.执行 result(str3) ,返回的结果 ...

  3. JavaScript基础练习题(一)

    JavaScript基础练习题(一) 注:仅供参考,不可用于其他用途 一.单选题 1.HTML页面中写JavaScript时,会用到HTML的一个标签,它是 A .script      B . st ...

  4. 计算机应用基础练习题题(史上最全)

    计算机应用基础练习题题 答案在最后 习题1 一.选择题 1.所有C函数的结构都包括的三部分是(    ). A.语句.花括号和函数体 B.函数名.语句和函数体 C.函数名.形式参数和函数体 D.形式参 ...

  5. JavaScript基础练习题(四)

    JavaScript基础练习题(四) 一.单选题 1.同步和异步执行分别表示什么含义 A 同步是按顺序依次执行:异步是同时分开一起执行 B 同步是同时分开一起执行:异步是按顺序依次执行 C 同步是按一 ...

  6. 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用

    构建node.js基础镜像 by Oyetoke Tobi Emmanuel 由Oyetoke Tobi Emmanuel 我如何使用Node.js构建工作抓取网络应用 (How I built a ...

  7. 构建node.js基础镜像_在Android上构建Node.js应用程序

    构建node.js基础镜像 by Aurélien Giraud 通过AurélienGiraud 在Android上构建Node.js应用程序-第1部分:Termux,Vim和Node.js (Bu ...

  8. 这些Python基础练习题你会几个?

    在人工智能大火的当今,Python 作为人工智能时代的首选语言已经越来越收到追捧:但是许多非科班.零基础的小伙伴常常苦于没有合适的入门 Python 的教程而感到苦恼:本人是一名资深Python开发, ...

  9. JS基础知识学习(一)

    JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...

最新文章

  1. java jdbc工具类抽取_JavaWeb入门(三):JDBC工具类的抽取
  2. 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机科学理论
  3. python猜密码游戏规则_【python笔记 三 】python脚本实战---数字密码小游戏
  4. 吴恩达|机器学习作业6.1.SVM建立垃圾邮件分类器
  5. Clion添加Posix消息队列的-lrt连接
  6. 基于cygwin构建u-boot(三)make错误忽视
  7. HDU 6395 Sequence(分段矩阵快速幂)题解
  8. gitgrab.sh
  9. 毕业设计!Python实现学生教师刷脸签到系统
  10. Vue生命周期和钩子函数详解
  11. Android端如何简单的防黑产
  12. implicit declaration of function 警告解决方法 (函数的隐式说明)
  13. JavaScript期末大作业 罗兰永恒花园动漫价绍网页 7页,含有table表格,js表单验证还有首页视频
  14. Android 网络图片,gif 下载并保存到相册
  15. Android实战(四)——正能量日报
  16. 软件测试面试题 | 提BUG相关
  17. android 短信 代码错误,android – Firebase手机身份验证错误:短信代码已过期
  18. 一般家用监控多少钱_安装一套监控需要多少钱,看完你就能自己算出来
  19. 六种常见的「用户行为」分析方法
  20. 论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning

热门文章

  1. (二)从生物神经元来学习人工神经元基本模型的工作原理
  2. 谷歌地球网页版_谷歌地球终于支持非Chromium浏览器:Safari除外
  3. 《鹿鼎记》的第一遍读后感作文3600字
  4. python 协程详解教程
  5. 优酷来疯直播安卓控件,支持flv、rtmp,支持添加视频特效等等
  6. 高校动态|清华大学团队:人脸识别技术,爆出巨大丑闻!
  7. 计算机文件克隆到光盘,有什么软件可以直接将电脑里的文件复制到光盘里 电脑文件刻录到dvd光盘软件...
  8. unityUI插件整理
  9. bigmap 绘制三维地形图_MAX真实三维地形图的制作,bigemap和global mapper软件使用
  10. Moov itom not found 详解及修复。