<script type="text/javascript">
var ss="aaaabbrq";
function getStr(){
var nar = [];
if(ss.length==1){
return ss;
}else{
for(var i=0;i<ss.length;i++){
//console.log(ss.charAt(i));
if(!nar[ss.charAt(i)]){
nar[ss.charAt(i)]=1;
}else
{
nar[ss.charAt(i)]=nar[ss.charAt(i)]+1;
}
}
}
var maxStr='';
var maxNum=1;
for(value in nar){
if(nar[value]>maxNum){
maxNum = nar[value];
maxStr=value;
}
}
return("maxStr:"+maxStr+";maxNum:"+maxNum);
}
console.log(getStr(ss));
(2)开发过程中遇到的内存泄露情况,如何解决的?
内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。浏览器中采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露。
1)、当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在IE中不会作出恰当处理,此时要先手工移除事件,不然会存在内存泄露。
2)、对于纯粹的 ECMAScript 对象而言,只要没有其他对象引用对象 a、b,也就是说它们只是相互之间的引用,那么仍然会被垃圾收集系统识别并处理。但是,在 Internet Explorer 中,如果循环引用中的任何对象是 DOM 节点或者 ActiveX 对象,垃圾收集系统则不会发现它们之间的循环关系与系统中的其他对象是隔离的并释放它们。最终它们将被保留在内存中,直到浏览器关闭。 3)、闭包可以维持函数内局部变量,使其得不到释放。
上例定义事件回调时,由于是函数内定义函数,并且内部函数--事件回调的引用外暴了,形成了闭包
解决之道,将事件处理函数定义在外部,解除闭包 或者在定义事件处理函数的外部函数中,删除对dom的引用
4)a = {p: {x: 1}};
b = a.p;
delete a.p;
执行这段代码之后b.x的值依然是1.由于已经删除的属性引用依然存在,因此在JavaScript的某些实现中,可能因为这种不严谨的代码而造成内存泄露。所以在销毁对象的时候,要遍历属性中属性,依次删除。 摘自:内存泄露问题
2)、对于纯粹的 ECMAScript 对象而言,只要没有其他对象引用对象 a、b,也就是说它们只是相互之间的引用,那么仍然会被垃圾收集系统识别并处理。但是,在 Internet Explorer 中,如果循环引用中的任何对象是 DOM 节点或者 ActiveX 对象,垃圾收集系统则不会发现它们之间的循环关系与系统中的其他对象是隔离的并释放它们。最终它们将被保留在内存中,直到浏览器关闭。 3)、闭包可以维持函数内局部变量,使其得不到释放。
上例定义事件回调时,由于是函数内定义函数,并且内部函数--事件回调的引用外暴了,形成了闭包
解决之道,将事件处理函数定义在外部,解除闭包 或者在定义事件处理函数的外部函数中,删除对dom的引用
4)a = {p: {x: 1}};
b = a.p;
delete a.p;
执行这段代码之后b.x的值依然是1.由于已经删除的属性引用依然存在,因此在JavaScript的某些实现中,可能因为这种不严谨的代码而造成内存泄露。所以在销毁对象的时候,要遍历属性中属性,依次删除。 摘自:内存泄露问题
(4)new操作符具体干了什么?
new共经历了四个过程。
var fn = function () { };
var fnObj = new fn();
1)、创建了一个空对象
var obj = new object();
2)、设置原型链
obj._proto_ = fn.prototype;
3)、让fn的this指向obj,并执行fn的函数体var result = fn.call(obj);
4)、判断fn的返回值类型,如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。if (typeof(result) == "object"){
fnObj = result;
} else {
fnObj = obj;
}
(5)ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?
Ajax是多种技术组合起来的一种浏览器和服务器交互技术,基本思想是允许一个互联网浏览器向一个远程页面/服务做异步的http调用,并且用收到的数据来更新一个当前web页面而不必刷新整个页面。该技术能够改进客户端的体验。包含的技术:
XHTML:对应W3C的XHTML规范,目前是XHTML1.0。
CSS:对应W3C的CSS规范,目前是CSS2.0
DOM:这里的DOM主要是指HTML DOM,XML DOM包括在下面的XML中
JavaScript:对应于ECMA的ECMAScript规范
XML:对应W3C的XML DOM、XSLT、XPath等等规范
XMLHttpRequest:对应WhatWG的Web Applications1.0规范
AJAX交互模型

同步:脚本会停留并等待服务器发送回复然后再继续
异步:脚本允许页面继续其进程并处理可能的回复
跨域:浏览器不能执行其他网站的脚本,是因为JS同源策略的限制,a.com域名下的JS无法操作b.com或c.a.com下的对象。
域名地址的组成:
http:// www . google : 8080 / script/jquery.js
http:// (协议号)
www (子域名)
google (主域名)
8080 (端口号)
script/jquery.js (请求的地址)
* 当协议、子域名、主域名、端口号中任意一各不相同时,都算不同的“域”。
* 不同的域之间相互请求资源,就叫“跨域”。
点击打开链接
(1)如果是端口或者协议造成的跨域问题前端是无能为力的 (2) 在跨域问题上,域仅仅通过URL的首部来识别而不会尝试判断相同的IP地址对应的域或者两个域是否对应一个IP
前端对于跨域的解决办法:
(1) document.domain+iframe
(2) 动态创建script标签
XHTML:对应W3C的XHTML规范,目前是XHTML1.0。
CSS:对应W3C的CSS规范,目前是CSS2.0
DOM:这里的DOM主要是指HTML DOM,XML DOM包括在下面的XML中
JavaScript:对应于ECMA的ECMAScript规范
XML:对应W3C的XML DOM、XSLT、XPath等等规范
XMLHttpRequest:对应WhatWG的Web Applications1.0规范
AJAX交互模型

同步:脚本会停留并等待服务器发送回复然后再继续
异步:脚本允许页面继续其进程并处理可能的回复
跨域:浏览器不能执行其他网站的脚本,是因为JS同源策略的限制,a.com域名下的JS无法操作b.com或c.a.com下的对象。
域名地址的组成:
http:// www . google : 8080 / script/jquery.js
http:// (协议号)
www (子域名)
google (主域名)
8080 (端口号)
script/jquery.js (请求的地址)
* 当协议、子域名、主域名、端口号中任意一各不相同时,都算不同的“域”。
* 不同的域之间相互请求资源,就叫“跨域”。
点击打开链接
(1)如果是端口或者协议造成的跨域问题前端是无能为力的 (2) 在跨域问题上,域仅仅通过URL的首部来识别而不会尝试判断相同的IP地址对应的域或者两个域是否对应一个IP
前端对于跨域的解决办法:
(1) document.domain+iframe
(2) 动态创建script标签