一个有情怀的程序员......

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面试题的更多相关文章

  1. 一道JS面试题引发的血案

    刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...

  2. new与属性访问的顺序,从一道JS面试题说起

    这段时间一直在研究设计模式,在看工厂模式的时候,看到一段代码 VehicleFactory.prototype.createVehicle = function ( options ) { if( o ...

  3. 一道经典的js面试题

    # 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...

  4. 一道经典JS面试题

    超过80%的候选人对下面这道JS面试题的回答情况连及格都达不到.这究竟是怎样神奇的一道JS面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示? 不起眼的开始 招聘前端工程师,尤其是中高级前端 ...

  5. JS面试题及答案

    一.JS闭包. f = function() {return true;};    g = function() {return false;};    (function() {       if ...

  6. 2017、2018面试分享(js面试题记录)记得点赞分享哦;让更多的人看到~~

    2017面试分享(js面试题记录) 1. 最简单的一道题 '11' * 2 'a8' * 3 var a = 2, b = 3; var c = a+++b; // c = 5 2. 一道this的问 ...

  7. 2016 JS 笔试题汇总:

    1 1 1 CS&S(中软国际): 1 JavaScript 循环表达式: 2  JavaScript表达式boolean返回值: 3 网页中的事件/HTML 事件属性/JavaScript ...

  8. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  9. 所在实习公司的JS笔试题

    在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单......后来觉得还是很有意思的,贴出来一起看看. 题目一: if(!("a" in w ...

随机推荐

  1. Laravel 数据插入

    Laravel 的数据库操作基于 Eloquent ORM,在插入数据时有以下几种方式,返回结果也不会不同: 1.insert 插入后会返回 true or false: 2.create 插入成功后 ...

  2. Spring自学教程-ssh整合(六)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...

  3. 关于cin的用法一些小结

    在写二叉树的时候遇到if(!cin)那几个标志位弄得并不清楚,还遇到了诸如cin.clear()等函数,感觉C++又白学了,于是打算去网上搜了几篇靠谱的文章,有时候看来,一些事件处理类的工程代码,在A ...

  4. (简单) HDU 5154 Harry and Magical Computer,图论。

    Description In reward of being yearly outstanding magic student, Harry gets a magical computer. When ...

  5. angular中的$http配置和参数

    依赖:$httpBackend $cacheFactory $rootScope $q $injector 使用:$http(config); 参数: method:字符串,请求方法. url:字符串 ...

  6. LPC2478内存布局以及启动方式

    LPC2478 是NXP公司推出的一款基于APR7TDMI-S的工控型MCU,内置RAM与flash,同时提供外部扩展flash和ram接口,拥有LCD控制器,其内存布局如下所示 其中Flash高达5 ...

  7. win8.1远程连接Redis数据库

    环境:redis安装在虚拟机Centos6.5系统上 通过java远程连接 问题一:报错 connected refused redis.conf 注释掉 #bind 127.0.0.1 问题二:还是 ...

  8. [Angular Tutorial] 12 -Event Handlers

    在这一步中,您将会在电话细节页面添加一个可点击的电话图片转换器. ·电话细节页面展示了当前电话的一张大图片和几张相对较小的略图.如果我们能仅仅通过点击略图就能把大图片换成略图就好了.让我们看看用Ang ...

  9. sql2000/sql2005/sql2008数据库变为0字节修复/MDF文件0字节恢复

    [数据恢复故障描述]  这个客户是生产型数据库,数据比较重要,产生量也比较大,客户要求必须尽快修复,保证生产尽快恢复运行.sql数据库文件,由于碎片链接过长,mdf文件突然变为0字节,开始客户尝试自行 ...

  10. Mysql和Oracle的一些语法区别

    作为一个有追求的程序猿,当然要不断的学习,巴拉巴拉巴拉...好了,贴一个网址给大家,哈哈 MySQL与Oracle 差异比较:http://www.cnblogs.com/HondaHsu/p/364 ...