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 相关文章推荐
在vs2010中调试javascript代码方法
Feb 11 Javascript
从数组中随机取x条不重复数据的JS代码
Dec 24 Javascript
获取中文字符串的实际长度代码
Jun 05 Javascript
jQuery弹出框代码封装DialogHelper
Jan 30 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
Dec 02 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
JavaScript实现广告弹窗效果
Aug 09 Javascript
Angular 理解module和injector,即依赖注入
Sep 07 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 Javascript
webgl实现物体描边效果的方法介绍
Nov 27 Javascript
vue 动态组件用法示例小结
Mar 06 Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 jQuery
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中使用gettext来支持多语言的方法
2011/05/02 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
基于python调用psutil模块过程解析
2019/12/20 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
乐观大学生的自我评价
2014/01/10 职场文书
交通安全教育制度
2014/02/02 职场文书
股权投资意向书
2014/04/01 职场文书
美容院店长岗位职责
2014/04/08 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
小学语文复习计划
2015/01/19 职场文书
小鞋子观后感
2015/06/05 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书