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 相关文章推荐
表单元素事件 (Form Element Events)
Jul 17 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
Aug 13 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
Aug 18 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
Bootstrap 轮播(Carousel)插件
Dec 26 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
ES6模块化的import和export用法方法总结
Aug 08 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
微信小程序 简易计算器实现代码实例
Sep 02 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
vue video和vue-video-player实现视频铺满教程
Oct 30 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
php插入排序法实现数组排序实例
2015/02/16 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
React中使用外部样式的3种方式(小结)
2019/05/28 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
JS实现使用POST方式发送请求
2019/08/30 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
浅谈Python的文件类型
2016/05/30 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
python如何使用代码运行助手
2020/07/03 Python
Python远程方法调用实现过程解析
2020/07/28 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
英文求职信结束语大全
2013/10/26 职场文书
安全协议书范本
2014/04/21 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL
Ruby处理CSV数据方法详解
2022/04/18 Ruby