一道关于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 ...
随机推荐
- $(function(){})的执行过程分析
作者:zccst 首先,$(function(){})是$(document).ready(function(){})的简写形式. 在日常使用中,我们会把代码写到$(function(){})中,今天 ...
- 一道关于 precision、recall 和 threshold关系的机器学习题
Suppose you have trained a logistic regression classifier which is outputing hθ(x). Currently, you p ...
- 调用图灵机器人API实现Android智能机器人
非常感谢CSDN博客上的鸿洋哥,他贴出的源码是我所做的工作的基础,鸿洋哥博客链接http://blog.csdn.net/lmj623565791/article/details/38498353 下 ...
- Github上的600多个iOS开源类库
Github上的600多个iOS开源类库,入下图所示,里面有很多资源,学习积累的好资源 地址:http://github.ibireme.com/github/list/ios/
- angular登录状态检查
待补充!!!!!!!!!!! 参加链接: http://www.brafox.com/post/2015/javascript/angularjs/angularjs-router-intercept ...
- css--用户体验笔记及兼容记录
css用户体验 1.HTML的< >&"©分别是<,>,&,",©;的转义字符 2.IE8和7的透明度 filter: progid:DXI ...
- flash跨域访问
-------------------------------------------------------背景------------------------------------------- ...
- iOS + UIWebView 实践
1. 调用java script 现在只能实现弹出窗口 [self.m_webView stringByEvaluatingJavaScriptFromString:@"alert(1)&q ...
- [Angular Tutorial] 1-Static Template
为了说明Angular如何扩展了标准的html,您将会创建了一个纯粹的静态html页面,并且看到我们如何将这些html代码转换成Angular能动态展示相同结果的模板. 在这一步您将会在一个html页 ...
- Mybatis中常见的SQL DML
1.sql select 查询 <select id="query" resultType="CfCurrbusilogEntity" > sele ...