一道关于call和this的JS面试题
一个有情怀的程序员......
2017年始,希望成为一个更好的自己,想自己所想,爱自己所爱
----------------------------------------------------------------------------------------------------------------------
笔试题:
<script type="text/javascript">
var scope = "global";
function log(){
var args = Array.prototype.join.call(arguments, ", ");
console.log(this.scope + ':' + args);
}
var dog = {
scope:'dog',
yelp: function(){
var scope = 'dog.yelp';
log('wow');
}
}
dog.yelp();
dog.yelp.call(dog);
log.call(dog, 'created');
</script>
考察知识点:
prototype、join()、call()、arguments 以及 this
prototype:对象的原型对象。有点抽象,可以理解为造物主的模板。
join():将数组(或一个类数组对象)的所有元素连接到一个字符串中。连接符为括号内的参数。eg:join(", ")
call():使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.
arguments:arguments对象是所有函数中可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。
理解点一: call() 、join() 可以参考call()、apply()、bind() 详解
function log(){
/*
* 将类对象数组arguments以“, ”分割开,并连接成字符串赋值给args *
* */
var args = Array.prototype.join.call(arguments, ", ");
console.log(this.scope + ':' + args);
}
理解点二:this指向的问题
内容比较多,单独整理了一篇博客 对JavaScript中this的理解
开始做题:
dog.yelp(); // global:wow
var scope = "global";
var dog = {
scope:'dog',
yelp: function(){
var scope = 'dog.yelp';
// 内部函数,this指向window
(function log(){
var args = Array.prototype.join.call(arguments, ", ");
console.log(this.scope + ':' + args);
})('wow');
}
} dog.yelp();
dog.yelp.call(dog); // global:wow
var scope = "global";
var dog = {
scope:'dog',
yelp: function(){
var scope = 'dog.yelp';
// 第二句利用call把yelp执行环境中的this指向了dog,但其实yelp中的this本来就指向dog,所以本质上第二句和第一句是一样的
(function log(){
var args = Array.prototype.join.call(arguments, ", ");
console.log(this.scope + ':' + args);
})('wow');
}
} dog.yelp.call(dog);
log.call(dog, 'created'); // dog:created
第三句比较简单,考察的是call() call()、apply()、bind() 详解
log()函数体中
this.scope == dog.scope == 'dog'
args == 'created'
一道关于call和this的JS面试题的更多相关文章
- 一道JS面试题引发的血案
刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...
- new与属性访问的顺序,从一道JS面试题说起
这段时间一直在研究设计模式,在看工厂模式的时候,看到一段代码 VehicleFactory.prototype.createVehicle = function ( options ) { if( o ...
- 一道经典的js面试题
# 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...
- 一道经典JS面试题
超过80%的候选人对下面这道JS面试题的回答情况连及格都达不到.这究竟是怎样神奇的一道JS面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示? 不起眼的开始 招聘前端工程师,尤其是中高级前端 ...
- JS面试题及答案
一.JS闭包. f = function() {return true;}; g = function() {return false;}; (function() { if ...
- 2017、2018面试分享(js面试题记录)记得点赞分享哦;让更多的人看到~~
2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2 'a8' * 3 var a = 2, b = 3; var c = a+++b; // c = 5 2. 一道this的问 ...
- 2016 JS 笔试题汇总:
1 1 1 CS&S(中软国际): 1 JavaScript 循环表达式: 2 JavaScript表达式boolean返回值: 3 网页中的事件/HTML 事件属性/JavaScript ...
- 10个常见的Node.js面试题
如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...
- 所在实习公司的JS笔试题
在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单......后来觉得还是很有意思的,贴出来一起看看. 题目一: if(!("a" in w ...
随机推荐
- 6种炫酷的CSS3按钮边框动画特效
6种炫酷的CSS3按钮边框动画特效Button border animate 用鼠标滑过下面的按钮看看效果! Draw Draw Meet Center Spin Spin Circle Spin T ...
- mysql面试
第一方面:30种mysql优化sql语句查询的方法 避免全表扫描: 1.where 及 order by 上建立索引.2.避免在 where 子句中使用!=或<>操作符3. select ...
- JAVA基础--代理模式
interface Network{ public void browse() ; // 浏览 } class Real implements Network{ public void browse( ...
- Android控件系列之RadioButton&RadioGroup
学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握Ra ...
- objective-c之各种数值
各种数值 NSArray和NSDictionary都只能存储对象,不能存储任何基本类型的数据,如int,float,struct.因此我们可以用对象来封装基本的数值. NSNumber Cocoa提供 ...
- 支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- Objective-C中的Hello World
Objective-C在C语言的基础之上,加入了自己的一些独特的特性,而且在Objective-C中兼容C语言原有的用法.在Objective-C中,实现Hello World和C语言有一定的区别,如 ...
- linux 下source、sh、bash、./执行脚本的区别
原文地址:http://blog.csdn.net/caesarzou/article/details/7310201 source命令用法: source FileName 作用:在当前bash环境 ...
- centos7.0之Lnmp和Lamp
首先配置防火墙 CentOS 7.0默认使用的是firewall作为防火墙 1.关闭firewall: systemctl stop firewalld.service #停止firewall sys ...
- 二叉树最大路径和-Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...