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基础练习题(2)
5.函数 1.按要求封装两个函数 1.封装一个函数,要求输入字符串转化成数组弹出 2.封装一个函数,要求能求出三个数中的最小值,注意:不准使用js内置函数 2.封装一个函数,求参数的和,注意:参数不固 ...
- js基础练习题(6)
10.其他 1.选择题 var name = 'World!'; (function () { if (typeof name === 'undefined') { var name = 'Nodei ...
- js基础练习题(4)
9.对象 阅读代码,回答问题 function User(name) { var name1 = name; this.name2 = name; function getName1() { retu ...
- js基础练习--控制多组图片切换
js基础练习题,一个按钮控制两组图片的切换,做这题的时候我忽然想到了将num1.mun2……都存放在一个数组中,根据索引值匹配到对应相应组的图片,这样不管有多少组图片都简单的搞定切换,可惜js基础都没 ...
- JS 基础学习随想
2012年就已经接触过了js,给我的印象:这是一门谈不上复杂的语言.大概这就是所谓的学的越浅,用的越少,觉得自己会的东西好像得更多吧!开始做基础练习题的时候觉得好像都十分简单.可是后来在做到对象数组的 ...
- 【2017-03-28】JS基础、windows对象、history对象、location对象
一.JS基础 JS - javaScript 1.js功能: 1).进行数据的运算.2).控制浏览器的一些功能.3).控制元素(属性.内容.样式) js引用位置: 可以放在html页的任意位置. 推荐 ...
- js 基础篇(点击事件轮播图的实现)
轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...
- Linux基础练习题(二)
Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...
随机推荐
- HttpServletRequest对象,请求行、请求头、请求体
HttpServletRequest 公共接口类HttpServletRequest继承自ServletRequest.客户端浏览器发出的请求被封装成为一个HttpServletRequest对象.对 ...
- [译]深入理解JVM Understanding JVM Internals
转载: 英文原版地址:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/ 翻不了墙的可以看这个英文版:https: ...
- Java实现 LeetCode 152 乘积最大子序列
152. 乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] ...
- Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- 第四届蓝桥杯JavaC组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.好好学习 汤姆跟爷爷来中国旅游.一天,他帮助中国的小朋友贴标语.他负责贴的标语是分别写在四块红纸上的四个大字:"好.好.学. ...
- 第四届蓝桥杯JavaB组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字 ...
- java实现第四届蓝桥杯猜灯谜
猜灯谜 题目描述 A 村的元宵节灯会上有一迷题: 请猜谜 * 请猜谜 = 请边赏灯边猜 小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字. 请你用计算机按小明的思路算一下,然后提交&quo ...
- 逐行解读HashMap源码
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 一.写在前面 相 ...
- 分享一个新出炉的JVM里不痛不痒的BUG(Attach机制相关)
本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 概述 老早之前写过一篇文章,关于attach机制的,可以看下这篇老文章了解一下JVM源码分析之Attach机制实现完全解读,比如大家常用 ...
- 钻进 Linux 内核看个究竟
Linux 内核,这个经常听见,却不不知道它具体是干嘛的东西,是不是觉得非常神秘? Linux 内核看不见摸不着,而对于这类东西,我们经常无从下手.本文就以浅显易懂的语言,带你钻进 Linux 内核, ...