一道关于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 ...
随机推荐
- 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序
http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX ...
- H3C inode for OSX 10.10 校园网客户端亲测可用
1.打开终端 2.输入以下命令 sudo /library/StartupItems/iNodeAuthService/iNodeAuthService start 3.输入管理密码 4.打开客户端联 ...
- 使用for循环输出杨辉三角-还是不懂得需要复习
package com.chongrui.test; /* *使用for循环输出杨辉三角杨辉三角形由数字排列,可以把它看作一个数字表,其基本特征是两侧的数值均为1,其他位置的数值是其正上方的数值与左上 ...
- <Natural Language Processing with Python>学习笔记一
Spoken input (top left) is analyzed, words are recognized, sentences are parsed and interpreted in c ...
- S3C2440的RTC解析
位二-十进制交换码(BCD)值数据给CPU.这些数据包括年.月.日.星期.时.分和秒的时间信息.RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能 实时时钟模块保存的数据是DCD码形式. ...
- jquery中(function($){...})(jQuery)是什么
调用函数 时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即:(function(arg){...})(param)而(function($){...}) (jQuery) ...
- iOS UICollectionView 长按移动cell
ref:http://www.jianshu.com/p/31d07bf32d62 iOS 9之后: 示例如下 效果 前言: 看完你可以学到哪些呢? 就是文章标题那么多, 只有那么多. . 手残效果图 ...
- Tessnet2图片识别(2)
1. 引用 tessnet2.dll (只有NET2.0版本) 2. 视图页 <%@ Page Language="C#" MasterPageFile="~/Vi ...
- FB面经 Prepare: Task Schedule
tasks has cooldown time, give an input task id array, output finish time input: AABCA A--ABCA output ...
- PHP上传图片重命名6种方案
一. 适用场景:无法使用从数据库中返回的自增长数字,给上传图片重命名.这是图片或文件上传的流程决定的.一般图片上传处理过程是,先上传图片到服务器,重命名之后,插入到数据库.也就是说,在数据库中非常容易 ...