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 相关文章推荐
Javascript中valueOf与toString区别浅析
Mar 19 Javascript
jQuery jcrop插件截图使用方法
Nov 20 Javascript
JavaScript中的setUTCDate()方法使用详解
Jun 11 Javascript
基于JavaScript操作DOM常用的API小结
Dec 01 Javascript
纯js实现手风琴效果代码
Apr 17 Javascript
SVG描边动画
Feb 23 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
Jan 10 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
Oct 28 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 Javascript
JSONP解决JS跨域问题的实现
May 25 Javascript
Openlayers实现点闪烁扩散效果
Sep 24 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
cmd下运行php脚本
2008/11/25 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
2017/01/12 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
python实现简单神经网络算法
2018/03/10 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python2和python3哪个使用率高
2020/06/23 Python
解决keras模型保存h5文件提示无此目录问题
2020/07/01 Python
Python configparser模块应用过程解析
2020/08/14 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
六查六看剖析材料
2014/02/15 职场文书
经典安踏广告词
2014/03/21 职场文书
教师工作决心书
2015/02/04 职场文书
应届生简历自我评价
2015/03/11 职场文书
工作犯错保证书
2015/05/11 职场文书
党员转正党支部意见
2015/06/02 职场文书