1、设计一个算法,用原生JS实现数组反转。
var a=[1,2,3];
var b=[];
for(var i=a.length-1,j=0;i>=0,j<a.length;i--,j++){
b[j]=a[i];
}
2、如何解决跨域。
3、git、代码合并、
4、npm遇到的问题
5、说说项目
下面是答题卷:
1、代码执行的结果
(function(){
var a=b=5;
})();
console.log(b);
console.log(a)
答案:5 ; 报错。
var a属于局部变量,b=5属于全局变量。
JS中变量声明分显式申明和隐式声明。
var num=100;//显式
num=100;//隐式
在函数中使用var关键字进行显式声明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。
当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。
不加var的写法是不推荐的。
a. 语义不清楚。
b. 团队开发时,容易覆盖掉其它作用域内的变量,引发异常。
c. 给window对象添加不必要成员
2、创建原生(N ative)方法给String对象添加一个repeatify函数,这个函数接受一个整数参数,来明确字符串需要重复几次,这个函数要求字符串重复指定的次数。
例如:console.log('hello'.repeatify(3));
应该打印:hellohellohello
答:
String.prototype.repeatify=function(num){
console.log(this);
var str='';
for(var i=0;i<num;i++){
str+=this;
}
return str;
}
"hello".repeatify(3);
3、变量提升(hoisting)
执行以下代码的结果是什么?为什么?
function test(){
console.log(a);
console.log(foo());
var a=1;
function foo(){
return 2;
}
}
答:undefined
2
function test(){ var a; function foo(){
return 2;
}
console.log(a); console.log(foo()); a=1;}
4、在JavaScript中,this是如何工作的,执行一下代码的结果是什么?
var fullname='john Doe';
var obj={
fullname:'colin Ihrig',
prop:{
fullname:'Aurelio De rosa' ,
getFullname:function(){
return:this.fullname;
}
}
}
console.log(obj.prop.getFullname());
var test=obj.prop.getFullname;
console.log(test());
答:this 永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。
匿名函数或不处于任何对象中的函数指向 window 。
Aurelio De rosa
john Doe
答: test.call(obj.prop);test.apply(obj.prop);
6、闭包(closures)
var nodes=document.getElementsByTagName('button');
for(var i=0;i<nodes.length;i++){
nodes[i].addEventListener('click',function(){
console.log('You clicked element:' +i);
});
}
请问:如果点击第一个和第四个按钮的时候,控制台分别打印输出什么结果?为什么?
答:You clicked element:4
You clicked element:4
7、数据类型,请问依次输出什么?
typeof null :object
typeof {} :object
typeof [] :object
typeof undefined :undefined
附:typeof操作符返回一个字符串,
指示未经
计算的操作数的类型。
typeof null "object"
typeof {} "object"
typeof [] "object"
typeof undefined "undefined"
8、事件循环
请问:下面代码运行结果是什么?请解释
function printing(){
console.log(1);
setTimeout(function(){console.log(2)},5000);
setTimeout(function(){console.log(3)},2000);
console.log(4);
}
答:1432
9、算法
写一个isPrime()函数,当其为质数时返回true,否则返回false
答:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。
var isPrime=function(num){
console.log("2");
if(num >= 1){
console.log("3");
if(num == 1){
alert('true');
}else{
for (var i = num - 1; i >= 1; i--) {
if(num%i == 0){
alert("true");
break
}else{
alert('false');
break
}
}
}
}
};
isPrime(num);
10、web优化
如何对网站的文件和资源进行优化
11、请描述cookies、sessionStorage和localStorage的区别
区别:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。Web Storage 的 api 接口使用更方便。
12、CSS
经常遇到的CSS兼容性问题有哪些?解决方法是什么?
13、设计模式
对MVC、MVVM的理解