github上比较有名的一个前端面试题,随便做做(4)
-
你使用过那些Javascript库?
jQuery ExtJS
-
你是否研究过你所使用的JS库或者框架的源代码?
正在研究中、、、、、再说
-
什么是哈希表?
类比数组,数组是编程上的哈希表,哈希表是一种数据结构,关键点就是用一个key值来取对应数据,就像数组的下标。
-
'undefined'变量和'undeclared'变量分别指什么?
'undefined'是未定义,在jQuery源码中第一行就是,在变量没有赋值的时候的值即为undefined。underclared即为被污染的命名,当使用变量时,没有用var关键字,这时候,定义的变量会在window命名空间被访问到。
-
闭包是什么,如何使用它,为什么要使用它?
函数数再定义一个函数,用于返回里面的值,
- 你喜欢的使用闭包的模式是什么?
- 两种模式用在不同场合。参见jQuery源码,立即调用模式,把$的jQuery源码放在了全局作用域下。返回函数类型的,制作一个随时可以使用的函数。
闭包与设计模式
- 单例模式,例如要做一个荫罩层,这个时候我们需要一个全局变量来判断页面是否已经存在这样一个东西,如果就用一个var a 定义,那么就会污染全局命名空间。最好的作法,就是把这样一个变旦放在一个函数里面,然后通过函数内的函数去判断调用写它的逻辑。
-
请举出一个匿名函数的典型用例?
- $.("input").each(function(e){this.val('OK')});
-
请解释什么是Javascript的模块模式,并举出实用实例。
我们在做radf库的时候,把所有的函数写在var function = radf(){}里,为的是在全局作用域下,只有一个radf对象,所有的属性和方法全在radf命名空间下面。这样就是一个无污染的环境。
- 如果有提到无污染的命名空间,可以考虑加分。
- 如果你的模块没有自己的命名空间会怎么样?
- 与其它库或内容造成冲突。
-
你如何组织自己的代码?是使用模块模式,还是使用经典继承的方法?
在模块模式中使用继承。例如我们的库中有pannel布局型组件和data型组件,其余都依照这两个基本组件继承而来。
-
请指出Javascript宿主对象和内置对象的区别?
浏览器环境就是一个宿主,例如ie和ff就是两个不同的宿主环境,里面有一些方法和解释编译的差异性。document、body就是这样的对象。
内置对象就是w3c那个啥组织规定的一些对象,不管任何浏览器都应该有的,例如Array、Object等,当然ie6这种水货很有可能没有。!!!
-
指出下列代码的区别:
function Person(){} var person = Person() var person = new Person()
1、定义一个函数为Person() 2、定义一个匿名函数指向person 3、实例化一个person、原型来自于函数Person -
'.call'和'.apply'的区别是什么?
参数不同。call是给每个argument,.apply是給一个参数组数。
-
请解释'Funciton.prototype.bind'的作用?
不晓得阿,。1!!
-
你如何优化自己的代码?
这个就多了,变量能放一起放一起,尽量提前break,能用html的不用css,能用js的不用css、jQuery对象的查找,尽量用#少用.。。一下想不起来了。
-
你能解释一下JavaScript中的继承是如何工作的吗?
创建了一个实例。这个实例是一个具有__proto__属性的空对象,并且__proto__指向F.prototype
初始化实例。将arguments 和 this赋予函数F。
返回这个实例。
-
在什么时候你会使用'document.write()'?
不用。。。。。。习惯用alert调试,有自己封装好的MsgBox.
- 大多数生成的广告代码依旧使用'document.write()',虽然这种用法会让人很不爽。
-
请指出浏览器特性检测,特性推断和浏览器UA字符串嗅探的区别?
。。。奇怪
-
请尽可能详尽的解释AJAX的工作原理。
非ajax是把要提交的内容放在submit里面,浏览器刷新提交数据。ajax即异步数据刷新,将要提交的数据与服务器接口交换数据,将得到的数据返回用于重组dom元素,以及改变一些页面效果。
-
请解释JSONP的工作原理,以及它为什么不是真正的AJAX。
动态添加script标签,script是不存在跨域问题的,所以可以跨域以get方式访问异域的数据。要跨域以post方式,需要使用iframe标签。ajax是使用XMLHttpRequest来和服务器进行异步通信,所以原理完全不同。
-
你使用过JavaScript的模板系统吗?
没有- - 。
- 如有使用做,请谈谈你都使用过那些类似库文件。比如Mustache.js,Handlebars等等。
- 好吧,我知道是什么东西了,大量的正则表达式用于替换掉html中代表数据的内容。生成静态的html页面。用于blog或论坛等地方。
-
请解释变量声明提升。
在中间声明的函数,会提升到最先去声明,但是赋值位置不会提升。
-
请描述下事件冒泡机制。
点击document中的div ,也会触发到document的click事件,这就是冒泡啦,!如果要停止冒泡,ie下e.returnValue = false。ff下,stop啥的。
-
"attribute"和"property"的区别是什么?
-
为什么扩展JavaScript内置对象是个坏做法?
- 每一个对象都有这个方法,有时候是多余的。
-
为什么扩展JavaScript内置对象是个好做法?
- 方便使用,不用记新的命名空间,直接在对象后面点就行了。
-
请指出document load和document ready的区别。(这是个问题的问题)
- 这是什么问题的问题呢???ready是在dom加载之后,图片加载之前,load是所有东西准备就绪之后。
-
'=='和'==='有什么不同?
- 三个等的话,是要求类型也相同,1==true是ok的,但是1===true是false;
-
你如何获取浏览器URL中查询字符串中的参数。
- location.href就是地址。再用正则或substring提取。
-
请解释一下JavaScript的同源策略。
- 域名,协议,端口相同才能被执行。防止其它网页对不同域不同协议不同端口网页的修改。
-
请解释一下事件代理。
- 事件代理,比较我要点一个table中的td时编辑,那么我们会在td上绑定事件呢还是table上,如果在td上绑定,会产生非常多的事件,对内存来说是个不小的考验,所以我们选择在table中绑定。因为js中有些事件是冒泡的,比如onclick。
-
请描述一下JavaScript的继承模式。
- 我只用一种哈。就是把子类的prototype继承父类。 例 : children.prototype = new perent();
-
-
-
-
-
如何实现下列代码:
[1,2,3,4,5].duplicator(); // [1,2,3,4,5,1,2,3,4,5]
Array.prototype.duplicator = function(){
var l = this.length,i;
for(i=0;i<l;i++){
this.push(this[i])
}
}
-
-
-
-
-
-
描述一种JavaScript memoization(避免重复运算)的策略。
- 开定时器
-
什么是三元条件语句?
- 嘿嘿我最喜欢用了。 a>b?a:b
-
函数的参数元是什么?
- 什么玩儿?
-
什么是"use strict"?使用它的好处和坏处分别是什么?
严格模式会导致出现错误就终止了。 开发时候使用一下可以防bug.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步