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 相关文章推荐
Add a Formatted Table to a Word Document
Jun 15 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
javascript实现仿百度图片的瀑布流加载效果
Apr 20 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
Angular2平滑升级到Angular4的步骤详解
Mar 29 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
Apr 13 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
微信小程序实时聊天WebSocket
Jul 05 Javascript
微信小程序实现基于三元运算验证手机号/姓名功能示例
Jan 19 Javascript
如何利用ES6进行Promise封装总结
Feb 11 Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 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 搜索框提示(自动完成)实例代码
2012/02/05 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
javascript控制swfObject应用介绍
2012/11/29 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
ES6 Generator基本使用方法示例
2020/06/06 Javascript
Vue.js使用axios动态获取response里的data数据操作
2020/09/08 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
Python使用urllib2模块抓取HTML页面资源的实例分享
2016/05/03 Python
python写入已存在的excel数据实例
2018/05/03 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
民主生活会汇报材料
2014/12/15 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
公司表扬稿范文
2015/05/05 职场文书
学习心理学心得体会
2016/01/22 职场文书
Redis基本数据类型Set常用操作命令
2022/06/01 Redis