一些js面试高频知识点的总结
第一部分:Object Prototypes (对象原型)
(1)定义一个方法,要求传入一个string类型的参数,然后将string的每个字符间加个空格返回,例如:
spacify('hello world') // => 'h e l l o w o r l d'
实现方案:
function spacify(string){
return string.split('').join(' ');
}
console.log(spacify('hello world')); //h e l l o w o r l d
(2)如何把(1)中定义的方法放入String对象的前面调用,例如:
'hello world'.spacify();
这里主要考察对function prototypes(方法原型)的理解,将此方法添加到String对象的原型上:
String.prototype.spacify = function(){
return this.split('').join(' ');
};
console.log('hello world'.spacify()); //h e l l o w o r l d
拓展考点:解释一下函数声明和函数表达式的区别
对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。
第二部分:参数 arguments
(1)先说说自己对参数(arguments)对象的理解。
arguments 对象只是与数组类似(它并不是Array 的实例),具有length属性用来检测传递参数的个数。 函数arguments对象
(2)定义一个未定义的log方法,用来代理处理console.log方法。
log('hello world')
容易想到的方法:
function log(msg) {
console.log(msg);
}
如果要求改变调用log的方式,传入多个参数,并且传入参数的个数是不定得,这里需要使用apply方法。解释一下apply和call的区别(接收参数形式的不同)。
function log(){
console.log.apply(console, arguments);
}
log('hello', 'world','beijing', 1); //hello world beijing 1
(3)给每一个log消息添加一个"(app)"的前辍,比如:
'(app) hello world'
arugments是一个伪数组,需要将他转化成为标准数组。通常方法是使用Array.prototype.slice方法。
function log(){
var args = [].slice.call(arguments); //[] 等价于 Array.prototype
args.unshift('(app)');
console.log.apply(console, args); //apply方法可以接收数组作为参数
}
log('hello', 'world'); //(app) hello world
第三部分:上下文和this
(1)给出以下例子,注意count属性不是只读取当前上下文的。求出以下的输出结果。
var User = {
count: 1, getCount: function() {
return this.count;
}
};
console.log(User.getCount()); // var func = User.getCount;
console.log(func()); //undefined
下面一个得出undefined的原因是func是在winodw的上下文中被执行的,所以会访问不到count属性。
(2)怎么样保证User总是能访问到func的上下文,即返回正即的值:1
应该使用Function.prototype.bind方法,例如:
var func = User.getCount.bind(User);
console.log(func()); //
但是bind方法对老版本的浏览器不起作用时怎么去解决?有没有替代方法。
Function.prototype.bind = Function.prototype.bind || function(context){
var self = this; return function(){
return self.apply(context, arguments);
};
}
参考来源: 如何面试前端工程师:GitHub 很重要
一些js面试高频知识点的总结的更多相关文章
- 「面试高频」二叉搜索树&双指针&贪心 算法题指北
本文将覆盖 「字符串处理」 + 「动态规划」 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和解析 开始之前,我们先看下会有哪些 ...
- 面试高频题:说一说对Spring和SpringMvc父子容器的理解?
引言 以前写了几篇关于SpringBoot的文章<面试高频题:springBoot自动装配的原理你能说出来吗>.<保姆级教程,手把手教你实现一个SpringBoot的starter& ...
- Java后端高频知识点学习笔记1---Java基础
Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...
- js进阶 9 js操作表单知识点总结
js进阶 9 js操作表单知识点总结 一.总结 一句话总结:熟记较常用的知识点,对于一些不太常用的知识点可以在使用的时候查阅相关资料,在使用和练习中去记忆. 1.表单中学到的元素的两个对象集合石什么? ...
- node.js 需要注意知识点
复习node.js 需要注意知识点--(重点) 2.1:参数传递获取造型 客户端脚手架(发) (参数传递) node.js(收) -发ajax this.axios.get(" ...
- C++面试高频题
作者:守望者1028链接:https://www.nowcoder.com/discuss/55353来源:牛客网 面试高频题: 校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我也忘记了 ...
- HTML&CSS面试高频考点(二)
HTML&CSS面试高频考点(一) ♥ 6. W3C盒模型与怪异盒模型 标准盒模型(W3C标准) 怪异盒模型(IE标准) 怪异盒模型下盒子的大小=width(content + bord ...
- js 面试知识点
基础 原型 原型链 作用域 闭包 异步 单线程 JS API DOM操作 AJAX 事件绑定 开发环境 版本管理 模块化 打包工具 运行环境 页面渲 ...
- js基础面试高频面点1:变量提升
一.什么是变量提升?var变量提升的底层原理是什么? 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 原理:引擎在读取js代码的过程中,分为两步,专业来说代码运行是分为预处理 ...
随机推荐
- JQuery和JavaScript常用方法的一些区别
jquery 就对javascript的一个扩展,封装,就是让javascript更好用,更简单,为了说明区别,下面与大家分享下JavaScript 与JQuery 常用方法比较 jquery 就 ...
- ASP.NET中的DEC加密解密过程
本文章分享自 青青果树园的博客,地址是:http://www.cnblogs.com/qqingmu/archive/2008/01/10/1034168.html 我们做网页时经常会遇到URL传输( ...
- 跳过爱奇艺优酷vip
1.google chrome浏览器 2.下载插件安装 Tampermonkey https://pan.baidu.com/s/1qvRQD2UO6gPHogjtSUBwUw 将 ...
- Algo: Dynamic programming
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- day06 tar命令使用,vim简单操作以及linux开机过程
上节课复习: cat: 查看全部文件内容 head: 从头查看文件内容,默认为前10行 tail: tail -f //动态查看文件是否增加内容 >> 追加 > 覆盖 more: 百 ...
- ssm框架,出现xxx不能加载,或者bean不能加载时的解决方案之一
有可能是你在项目的mapper.xml文件中添加了本项目没有的实体类, 你把日志中找不到的最后一个实体类全项目搜索下,改成本项目可以引用的即可
- 89 k数和
原题网址:https://www.lintcode.com/problem/k-sum/description 描述 给定n个不同的正整数,整数k(k < = n)以及一个目标数字. 在这n个数 ...
- HDU 1069 Monkey and Banana (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 简单记录一下 思路:把长方体的各种摆法都存到数组里面,然后按照长宽排序,再dp即可 转移方程 d ...
- java生成excel报表文件
此次简单的操作将数据从数据库导出生成excel报表以及将excel数据导入数据库 首先建立数据库的连接池: package jdbc; import java.io.FileInputStream; ...
- 图数据库neo4j和关系数据库的区别
相信您和我一样,在使用关系型数据库时常常会遇到一系列非常复杂的设计问题.例如一部电影中的各个演员常常有主角配角之分,还要有导演,特效等人员的参与.通常情况下这些人员常常都被抽象为Person类型,对应 ...