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 相关文章推荐
ajax上传时参数提交不更新等相关问题
Dec 11 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
Jul 31 Javascript
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
AngularJS通过$sce输出html的方法
Sep 22 Javascript
JS实现拖拽的方法分析
Dec 20 Javascript
JS实现的验证身份证及获取地区功能示例
Jan 16 Javascript
AngularJS Select(选择框)使用详解
Jan 18 Javascript
Angular CLI在Angular项目中如何使用scss详解
Apr 10 Javascript
微信小程序使用gitee进行版本管理
Sep 20 Javascript
小程序自定义日历效果
Dec 29 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
Terran建筑一览
2020/03/14 星际争霸
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
简单的php中文转拼音的实现代码
2014/02/11 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
jquery自定义表格样式
2015/11/23 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
浅析Python基础-流程控制
2016/03/18 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
通过Pandas读取大文件的实例
2018/06/07 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
运动会稿件200字
2014/02/07 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
公司租房协议书范本
2014/10/08 职场文书
2015年调度员工作总结
2015/04/30 职场文书
旅游投诉信范文
2015/07/02 职场文书