面试题解答
来源:互联网 发布:淘宝店铺联盟怎么弄 编辑:程序博客网 时间:2024/05/21 19:47
1.这道题输出结果
var z=10;
function foo(){console.log(z);
}
(function(funArg){var z=20;
funArg()
})(foo)
解答:函数自动执行,函数参数是值传递,funArg引用外部foo函数,而foo函数作用域没有z变量,所以找到全局变量z,输出结果10
2.代码执行后结果
var data=[];
for(var k=0;k<3;k++){
data[k]=function(){
console.log(k)
}
}
data[0]();
data[1]();
data[2]();
解答:通过for循环此时,data数组中存了3个function(){console.log(k)},而变量k也变成3,所以当调用数组中函数这个k就是3,输出结果三个3
3.假设现有一篇文章,var content = "...大量文字",
文章中触及到一些敏感词汇,如 ["习近平","周永康","中共","6.4"] 等内容。
如何在文章中发现这些敏感词,并将背景设置为红色或者改变字体颜色并标示出来。
解答:
var RepaceWord=function(){
this.content='1111aaaaa习近平,fffff周永康ffff,fff中共llll,@#!6.4##@';
this.words=['习近平','周永康','中共','6.4'];
}
RepaceWord.prototype={
changeColor:function(){
for(var i=0;i<this.words.length;i++){
this.content=this.content.replace(new RegExp(this.words[i],'g'),'<span style="background:red;">'+this.words[i]+'</span>')
}
return this.content;
}
}
var content=new RepaceWord().changeColor()
console.log(content)
这道题考的是字符串替换replace(),第一个参数正则,第二个全局,返回你替换过的字符串
4.JQuery 中 $.fn.extend 函数的实现(实现核心代码即可)
解答: $.fn.extend()是向JQuery添加公用属性和方法,$.extend()是向JQuery类添加静态方法
//创建JQuery类
var JQuery=function(selector){
this.selector=document.getElementById(selector.slice(1));
}
JQuery.prototype={
constuctor:JQuery,
extend:function(fnName,fn){
(typeof this[fnName]==='function')?this[fnName]=new Function():this[fnName]=fn;
}
}
JQuery.extend=function(fnName,fn){
(typeof this[fnName]==='function')?this[fnName]=new Function():this[fnName]=fn;
}
var $=function(selector){
return new JQuery(selector);
}
$.fn=JQuery.prototype;
$.extend=JQuery.extend;
$.fn.extend('colorRed',function(){
this.selector.style.color='red';
});
$.extend('add',function(){
console.log(1)
})
var box=$('#box');
box.colorRed()
JQuery.extend();
$.add()
5.设计基于观察者模式的事件绑定机制
观察者模式又成为订阅发布模式所以
var Observer=(function(){
var _message={};
return{
//订阅
regist:function(type,fn){
(typeof _message[type]==='undefined')?_message[type]=[fn]:_message[type].push(fn);
},
//发布
fire:function(type,args){
if(!_message[type]){
return;
}
var events={
type:type,
args:args||{}
},
i=0,
len=_message[type].length;
for(;i<len;i++){
_message[type][i].call(this,events);
}
},
//删除
remove:function(type,fn){
if(_message[type] instanceof Array){
var i=_message[type].length-1;
for(;i>=0;i--){
_message[type][i]===fn && _message[type].splice(i,1);
}
}
}
}
})()
Observer.regist('test',function(e){
console.log(e.type,e.args.msg)
})
Observer.fire('test',{msg:'传递参数'})
- C#面试题解答
- C#面试题解答
- C#面试题解答
- 面试题解答
- 经典面试题解答
- 阿里面试题解答
- 腾讯面试题解答
- iPhone面试题解答
- iPhone面试题解答
- c++面试题解答
- Android面试题解答
- php 面试题&解答
- 一些面试题解答
- 面试题解答
- 面试题及解答
- 百度面试题的解答
- C#面试题及解答
- 一道面试题及解答
- sql-索引的作用及其使用方法和经验
- echarts画一个折现/柱状混合图
- 如何利用Python和win32编程避免重复性体力劳动(四)——下拉列表操作:CB_SETCURSEL、CBN_SELENDOK和CBN_SELCHANGE
- 在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)
- 【Java基础】八种基本数据类型--原码反码补码
- 面试题解答
- Oracle如何批量导出数据库表结构(建表语句)
- 使用百度API实现实时公交线路查询及地图显示
- 正则表达式基础
- 虚拟篇 01. Hyper-V 安装 ❀ Windows Server 2016
- 关于postgresql的注意事项
- 光环国际PMP:逗乐~项目经理感言
- 【莫队算法】uva 12345
- Anaconda介绍