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 时间比较实现代码
Oct 28 Javascript
javascript自然分类法算法实现代码
Oct 11 Javascript
domReady的实现案例
Nov 23 Javascript
微信小程序 devtool隐藏的秘密
Jan 21 Javascript
canvas实现图像布局填充功能
Feb 06 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
微信小程序云开发之云函数详解
May 16 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
vue移动端使用canvas签名的实现
Jan 15 Javascript
简单了解three.js 着色器材质
Aug 03 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
laravel中Redis队列监听中断的分析
2020/09/14 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
python多重继承实例
2014/10/11 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python版DDOS攻击脚本
2019/06/12 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
2019年.net常见面试问题
2012/02/12 面试题
体育专业个人求职信范文
2013/12/27 职场文书
物流司机岗位职责
2013/12/28 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
科研课题实施方案
2014/03/18 职场文书
绿里奇迹观后感
2015/06/15 职场文书
靠谱准确的求职信
2019/04/02 职场文书