面经练习(九)
1.这个函数名字是a,使得a被执行之后有如下效果,输出1、2、3(闭包实现)
a(); // 函数返回值为1
a(); // 函数返回值为2
a(); // 函数返回值为3
let a = (function() {
let counter = 0
return function() {
return (++counter)
}
})()
console.log(a());
console.log(a());
console.log(a());
2.实现一个函数,用于输出指定字符串中的最大相同连续字符的长度function
function maxLength(str) {
let arr = str.split('');
let count = 1;
let max = 1;
for (let i = 1; i < arr.length; i++) {
if (arr[i] === arr[i - 1]) {
count++;
} else {
max = max > count ? max : count;
count = 1;
}
}
console.log(max);
}
maxLength('sdsaaaaacsackkkkkkkkdddd');
3.如何定义一个链表及相关学习
4.给定字符串,求出现次数最多的那个字母及次数,如有多个重复则都输出
function maxstr(str) {
var map = new Map();
var arr = str.split('');
for (var i = 0; i < str.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], 1);
} else {
var mxx = map.get(arr[i]);
mxx++;
map.set(arr[i], mxx);
}
}
console.log(map);
var result = [];
var max = 0;
map.forEach(function(value, key) {
max = max > value ? max : value
})
console.log(max);
map.forEach(function(value, key) {
if (value == max) {
result.push(key);
}
})
console.log(result);
}
maxstr('sdsaaaaacsackkkkkkkkkdddd');
这里要注意,遍历map要用forEach方法,而且forEach方法参数顺序为value,key不要弄反了
map和set
5.排序问题fed123ab456c" => "abcdef123456
function sort1(a, b) {
if (a < b) {
return -1
} else if (a > b) {
return 1
} else {
return 0
}
}
let str = 'fdsf313141';
let arr = str.split('');
console.log(arr.sort(sort1));
let arr1 = [];
let arr2 = [];
let arr3 = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i].charCodeAt() >= 97 && arr[i].charCodeAt() <= 122) {
arr2.push(arr[i])
} else {
arr1.push(arr[i])
}
}
console.log(arr3.concat(arr2).concat(arr1));
注意一下sort()排序方法会调用每个数组项的toString()转型方法,所以比较的相当是字符串,所以10和5比较的时候,相当于’10‘跟’5‘比较,‘1’<‘5’
结果为10<5,需要对sort函数对上述处理
6.Number()转换规则
7.判断js空对象的方法
8.margin和padding的值是百分比的时候是怎么计算的?
百分比取值的计算
对元素的margin和padding设置百分比的时候,他的百分比是相对于父元素的宽度width计算的,margin上下左右都是如此。
如果没有为元素声明width的时候,此时元素的宽度取决于父元素的width,这样可以得到流式布局,元素的外边距会扩大和缩小来适应父元素的大小。
为什么都是相对于宽度而不是高度:
CSS权威指南中的解释:
我们认为,正常流中的大多数元素都会足够高以包含其后代元素(包括外边距),如果一个元素的上下外边距是父元素的height的百分数,就可能导致一个无限循环,父元素的height会增加,以适应后代元素上下外边距的增加,而相应的,上下外边距因为父元素height的增加也会增加,如此循环。