js基础练习题(3)
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)相关推荐
- js基础练习题(1)
1.字符串 视频教程地址: js基础练习题 1.如何连接两个或者两个以上字符串? var cssname = 'box' var num = 1 var html = '<div class=& ...
- js基础练习题 二次封装函数
题目描述 已知函数 fn 执行需要 3 个参数.请实现函数 partial,调用之后满足如下条件: 1.返回一个函数 result,该函数接受一个参数 2.执行 result(str3) ,返回的结果 ...
- JavaScript基础练习题(一)
JavaScript基础练习题(一) 注:仅供参考,不可用于其他用途 一.单选题 1.HTML页面中写JavaScript时,会用到HTML的一个标签,它是 A .script B . st ...
- 计算机应用基础练习题题(史上最全)
计算机应用基础练习题题 答案在最后 习题1 一.选择题 1.所有C函数的结构都包括的三部分是( ). A.语句.花括号和函数体 B.函数名.语句和函数体 C.函数名.形式参数和函数体 D.形式参 ...
- JavaScript基础练习题(四)
JavaScript基础练习题(四) 一.单选题 1.同步和异步执行分别表示什么含义 A 同步是按顺序依次执行:异步是同时分开一起执行 B 同步是同时分开一起执行:异步是按顺序依次执行 C 同步是按一 ...
- 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用
构建node.js基础镜像 by Oyetoke Tobi Emmanuel 由Oyetoke Tobi Emmanuel 我如何使用Node.js构建工作抓取网络应用 (How I built a ...
- 构建node.js基础镜像_在Android上构建Node.js应用程序
构建node.js基础镜像 by Aurélien Giraud 通过AurélienGiraud 在Android上构建Node.js应用程序-第1部分:Termux,Vim和Node.js (Bu ...
- 这些Python基础练习题你会几个?
在人工智能大火的当今,Python 作为人工智能时代的首选语言已经越来越收到追捧:但是许多非科班.零基础的小伙伴常常苦于没有合适的入门 Python 的教程而感到苦恼:本人是一名资深Python开发, ...
- JS基础知识学习(一)
JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...
最新文章
- java jdbc工具类抽取_JavaWeb入门(三):JDBC工具类的抽取
- 中国计算机学会CCF推荐国际学术会议和期刊目录-计算机科学理论
- python猜密码游戏规则_【python笔记 三 】python脚本实战---数字密码小游戏
- 吴恩达|机器学习作业6.1.SVM建立垃圾邮件分类器
- Clion添加Posix消息队列的-lrt连接
- 基于cygwin构建u-boot(三)make错误忽视
- HDU 6395 Sequence(分段矩阵快速幂)题解
- gitgrab.sh
- 毕业设计!Python实现学生教师刷脸签到系统
- Vue生命周期和钩子函数详解
- Android端如何简单的防黑产
- implicit declaration of function 警告解决方法 (函数的隐式说明)
- JavaScript期末大作业 罗兰永恒花园动漫价绍网页 7页,含有table表格,js表单验证还有首页视频
- Android 网络图片,gif 下载并保存到相册
- Android实战(四)——正能量日报
- 软件测试面试题 | 提BUG相关
- android 短信 代码错误,android – Firebase手机身份验证错误:短信代码已过期
- 一般家用监控多少钱_安装一套监控需要多少钱,看完你就能自己算出来
- 六种常见的「用户行为」分析方法
- 论文阅读笔记:Improving Attacks on Speck32 / 64 using Deep Learning
热门文章
- (二)从生物神经元来学习人工神经元基本模型的工作原理
- 谷歌地球网页版_谷歌地球终于支持非Chromium浏览器:Safari除外
- 《鹿鼎记》的第一遍读后感作文3600字
- python 协程详解教程
- 优酷来疯直播安卓控件,支持flv、rtmp,支持添加视频特效等等
- 高校动态|清华大学团队:人脸识别技术,爆出巨大丑闻!
- 计算机文件克隆到光盘,有什么软件可以直接将电脑里的文件复制到光盘里 电脑文件刻录到dvd光盘软件...
- unityUI插件整理
- bigmap 绘制三维地形图_MAX真实三维地形图的制作,bigemap和global mapper软件使用
- Moov itom not found 详解及修复。