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 相关文章推荐
js中关于String对象的replace使用详解
May 24 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
js charAt的使用示例
Feb 18 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
Sep 10 Javascript
iframe里使用JavaScript控制主页转向的方法
Apr 03 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
基于jQuery实现火焰灯效果导航菜单
Jan 04 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
Feb 15 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
Feb 09 Javascript
vue地区选择组件教程详解
May 04 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
vue+django实现下载文件的示例
Mar 24 Vue.js
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 fsockopen写的HTTP下载的类
2007/02/22 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
php时间计算相关问题小结
2016/05/09 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
详解vue-router基本使用
2017/04/18 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
echarts学习笔记之图表自适应问题详解
2017/11/22 Javascript
JS实现区分中英文并统计字符个数的方法示例
2018/06/09 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
python实现杨辉三角思路
2017/07/14 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
基于Python正确读取资源文件
2020/09/14 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
2014年个人工作总结模板
2014/12/15 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL