5个JavaScript经典面试题


Posted in Javascript onOctober 13, 2014

1:Scope作用范围

 (function() {

    var a = b = 5;

 })();

 console.log(b);

什么会被打印在控制台上?

回答

上面的代码会打印 5。

这个问题的诀窍是,这里有两个变量声明,但 a 使用关键字var声明的。代表它是一个函数的局部变量。与此相反,b 变成了全局变量。

这个问题的另一个诀窍是,它没有使用严格模式 (‘use strict';)。如果启用了严格模式,代码就会引发ReferenceError的错误:B没有定义(b is not defined)。请记住,严格模式,则需要明确指定,才能实现全局变量声明。比如,你应该写:

 (function() {

    'use strict';

    var a = window.b = 5;

 })();
 console.log(b);

2:创建“原生”(native)方法

给字符串对象定义一个repeatify功能。当传入一个整数n时,它会返回重复n次字符串的结果。例如:

 console.log('hello'.repeatify(3));

应打印 hellohellohello。

回答

一个可能的实现如下所示:

 String.prototype.repeatify = String.prototype.repeatify || function(times) {

    var str = '';

    for (var i = 0; i < times; i++) {

       str += this;

    }

    return str;

 };

现在的问题测试开发者有关JavaScript继承和prototype的知识点。这也验证了开发者是否知道该如果扩展内置对象(尽管这不应该做的)。

这里的另一个要点是,你要知道如何不覆盖可能已经定义的功能。通过测试一下该功能定义之前并不存在:

 String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};

当你被要求做好JavaScript函数兼容时这种技术特别有用。

3:声明提升(Hoisting)

执行这段代码,输出什么结果。

 function test() {

    console.log(a);

    console.log(foo());

    var a = 1;

    function foo() {

       return 2;

    }

 }
10: test();

回答

这段代码的结果是 undefined 和 2。

原因是,变量和函数的声明都被提前了(移到了函数的顶部),但变量不分配任何值。因此,在打印变量的时候,它在函数中存在(它被声明了),但它仍然是undefined 。表示换句话说,上面的代码等同于以下内容:

 function test() {

    var a;

    function foo() {

       return 2;

    }
    console.log(a);

    console.log(foo());
    a = 1;

 }
 test();

4:this在JavaScript中如何工作的

下面的代码会输出什么结果?给出你的答案。

 var fullname = 'John Doe';

 var obj = {

    fullname: 'Colin Ihrig',

    prop: {

       fullname: 'Aurelio De Rosa',

       getFullname: function() {

          return this.fullname;

       }

    }

 };
 console.log(obj.prop.getFullname());
 var test = obj.prop.getFullname;
 console.log(test());

回答

答案是Aurelio De Rosa和John Doe。原因是,在一个函数中,this的行为,取决于JavaScript函数的调用方式和定义方式,而不仅仅是看它如何被定义的。

在第一个 console.log()调用中,getFullname()被调用作为obj.prop对象的函数。所以,上下文指的是后者,函数返回该对象的 fullname。与此相反,当getFullname()被分配到test变量时,上下文指的是全局对象(window)。这是因为test是被隐式设置为全局对象的属性。出于这个原因,该函数返回window的fullname,即定义在第一行的那个值。

5:call()和apply()

现在让你解决前一个问题,使最后的console.log() 打印 Aurelio De Rosa。

回答

该问题可以通过强制使用 call() 或者 apply()改变函数上下文。在下面我将使用call(),但在这种情况下,apply()会输出相同的结果:

console.log(test.call(obj.prop));
Javascript 相关文章推荐
Javascript document.referrer判断访客来源网址
May 15 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
Apr 02 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
Vue.js每天必学之数据双向绑定
Sep 05 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
利用JavaScript如何查询某个值是否数组内
Jul 30 Javascript
Mongoose实现虚拟字段查询的方法详解
Aug 15 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
vue实现计步器功能
Nov 01 Javascript
js实现简单进度条效果
Mar 25 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 Javascript
Json实现异步请求提交评论无需跳转其他页面
Oct 11 #Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 #Javascript
ie8模式下click无反应点击option无反应的解决方法
Oct 11 #Javascript
JS 获取鼠标左右键的键值方法
Oct 11 #Javascript
jquery动态加载js/css文件方法(自写小函数)
Oct 11 #Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 #Javascript
JavaScript中实现最高效的数组乱序方法
Oct 11 #Javascript
You might like
PDO::quote讲解
2019/01/29 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
[54:27]TNC vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
汽车专业学生自我评价
2014/01/19 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
体育馆的标语
2014/06/24 职场文书
人力资源职位说明书
2014/07/29 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
Python 中的 copy()和deepcopy()
2021/11/07 Python
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS