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 相关文章推荐
Jquery阻止事件冒泡 event.stopPropagation
Dec 11 Javascript
JS截取字符串常用方法详细整理
Oct 28 Javascript
node.js中的fs.writeFileSync方法使用说明
Dec 14 Javascript
jQuery中document与window以及load与ready 区别详解
Dec 29 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
Aug 12 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
js选择器全面解析
Jun 27 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
详解如何配置vue-cli3.0的vue.config.js
Aug 23 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
Vue实现兄弟组件间的联动效果
Jan 21 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
Apr 16 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
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
PHP多线程类及用法实例
2014/12/03 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python3.2中的字符串函数学习总结
2015/04/23 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python 数据结构之队列的实现
2017/01/22 Python
Python编写登陆接口的方法
2017/07/10 Python
Python实现购物车购物小程序
2018/04/18 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
2014教师研修学习体会
2014/07/08 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
军训新闻稿范文
2015/07/17 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
python 常用的异步框架汇总整理
2021/06/18 Python