1.以下程序中i的输出值为:
var i = 10;
for(var i = 0; i < 5; i++){
i += 2;
}
console.log(i);
答案:6
在js中只有全局作用域和函数作用域,没有块级作用域。全局i会被for循环中的覆盖,输出6。这道题有个小陷阱选项12。
2.下面对CDN表述错误的有那些?
A. CDN是一种分布时网络存储
B. CDN服务器质量比程序服务器更好,所以速度才块。
C. 使用CDN可以对抗DDOS攻击
D. CDN无法加速动态程序
答案:BD
CDN的全称是内容分发网络(Content Delivery Network),是一层构建在互联网之上的一层智能虚拟网络。智能体现在通过负载均衡技术对分布时存储的内容进行调度,是用户能够访问到距离最近、响应最快的内容。响应用户的内容直接来源于缓存服务器。
3.下面代码执行后,foo.x的值是 :
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
A. 1
B. 2
C. 程序报错
D. 其他
答案:D
要理解这道题,我们应该对连续赋值的顺序有了解。第三条语句的执行顺序:首先会为foo创建属性x,我们都知道js的变量声明提前,此时的foo.x=undefined;接着foo指向了新的对象{n:2},最后给一开始声明的foo.x赋值{n:2}。
好了,理清执行顺序后,就要说这道题的关键点了。我们知道对象是一种复杂数据类型,变量foo、bar中存储的其实是对象的存储地址。foo={n:2}将foo的指针从{n:1}移向了{n:2},当然经过变量的声明提前后{n:1}实际是{n:1,x:undefined},foo.x=foo后为{n:1,x:{n:2}},而这一切都与foo无关了,因为早在foo={n:2}时foo就与这个对象无关了。
4.说说你所知道解决跨域问题的方案,越多越好:
Jsonp、window.postMessage、document.domain、http请求头设置Access-Control-Allow-Origin
5.使用快速排序算法,对[3,23,66,32,2,77,45,87,64,34,33]进行由小到大的排序
var arr = [3,23,66,32,2,77,45,87,64,34,33];
(function quickSort(arr,begin,end){
if(begin>=end) return; //递归调用结束
var p = arr[begin]; //基准p
var i = begin+1,j = end; //i从左向右扫描,j从右向左扫描
while(true){
for(;arr[j]>=p&&j>begin;j--);
for(;arr[i]<=p&&i<j;i++);
if(i>=j) break;
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
var temp = arr[j]; //交换p与arr[j]
arr[j] = p;
arr[begin] = temp;
quickSort(arr,begin,j-1); //基准p已归位,拆分子序列继续排序
quickSort(arr,j+1,end);
})(arr,0,arr.length-1);
6.[“1”, “2”, “3”].map(parseInt)的执行结果是:
A. ["1", "2", "3"]
B. [1, 2, 3]
C. [0, 1, 2]
D. 其他
答案:D
要对map和parseInt方法足够了解。map方法提供三个参数:当前遍历的元素、索引、被遍历数组本身。parseInt除了接受一个参数进行转换外,还会接受第二个参数作为进制数。当省略第二个参数或为0时,会根据第一个参数自动判断进制。如果第二个参数小于2或大于36,parseInt返回NaN;如果两参数不匹配,也返回NaN(如将3作为二进制数转换)。
补充:parseFloat只接受一个参数,parseInt和parseFLoat在接收字符串的第一个字符不能转为数字时返回NaN。
7.关于SVG和CANVAS,下面陈述正确的有:
A. SVG做动画性能要优于CANVAS
B. CANVAS做动画性能要优于SVG
C. SVG产生的dom数量比CANVAS要少
D. CANVAS产生的dom数量比SVG要少
E. CANVAS可以使用css设置动画样式
F. SVG可以使用css设置动画样式
答案:DF