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的试卷自动排版系统实现代码
Jan 06 Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
May 05 Javascript
node.js中的path.dirname方法使用说明
Dec 09 Javascript
BootStrap与Select2使用小结
Feb 17 Javascript
javascript少儿编程关于返回值的函数内容
May 27 Javascript
vue添加axios,并且指定baseurl的方法
Sep 19 Javascript
深入理解vue中的slot与slot-scope
Apr 22 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
使用express获取微信小程序二维码小记
May 21 Javascript
vue h5移动端禁止缩放代码
Oct 28 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
Jun 19 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音乐采集(部分代码)
2007/02/14 PHP
PHP运行模式的深入理解
2013/06/03 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
浅谈Jquery核心函数
2015/06/18 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
javascript帧动画(实例讲解)
2017/09/02 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
python装饰器深入学习
2018/04/06 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
中英双版中文教师求职信
2013/10/27 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
技术总监个人的自我评价范文
2013/12/18 职场文书
五一家具促销方案
2014/01/10 职场文书
打架检讨书500字
2014/01/29 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
《自己去吧》教学反思
2016/02/16 职场文书