面试总结
来源:互联网 发布:centos 安装 分区 编辑:程序博客网 时间:2024/06/13 17:56
1.var fn=function a(){
alert(a);
};
fn();//function a(){alert(a);}
alert(a);//a is not defined;
alert(a);
};
fn();//function a(){alert(a);}
alert(a);//a is not defined;
**************
考的是函数表达式和函数声明的区别,表达式不会提前,只会在赋值时候声明,由赋值符左操作数调用执行。**************
2.var a=1;
function fn(){
a=b=2;
}
fn();
alert(a);//2
alert(b);//2
function fn(){
a=b=2;
}
fn();
alert(a);//2
alert(b);//2
**************
a还好就是函数内直接改变全局变量的值,主要是b,如果严格模式会出错,否则就是相当于没有var的声明的b直接定义,为全局变量。
**************
3.function a(){
console.log("function a");
}
var a;
console.log(a);//function a(){ console.log("function a"); }
console.log("function a");
}
var a;
console.log(a);//function a(){ console.log("function a"); }
**************
变量声明提前,var a;提到最前面,然后声明了函数a,所以就是输出该函数。
**************
4.function test(){
var a=1;
setTimeout(function(){
alert(a);
a=3;
},0);
a=2;
setTimeout(function(){
alert(a);
a=4;
},3000);
}
test();
alert(0);
var a=1;
setTimeout(function(){
alert(a);
a=3;
},0);
a=2;
setTimeout(function(){
alert(a);
a=4;
},3000);
}
test();
alert(0);
**************
结果是:0 ,2, 3
当调用test的时候里面的alert都是在时间间隔内部,所以会先放到一个时间间隔的队列,之后会接在js执行队列的末尾,所以js正常执行顺序的程序先执行。如果test内部有js的顺序执行的内容也会按顺序先执行。
**************
5.var a=1;
obj={b:2};
function fn(){}
fn.c=3;
function change(x,y,z){
x=4;
y.b=5;
z.c=6;
return z;
}
change(a,obj,fn);
console.log(a,obj.b,fn.c);//12
obj={b:2};
function fn(){}
fn.c=3;
function change(x,y,z){
x=4;
y.b=5;
z.c=6;
return z;
}
change(a,obj,fn);
console.log(a,obj.b,fn.c);//12
**************
change函数的三个参数x,y, z 分别对应的是a ,obj ,fn, a是基本数据类型,所以x相当于1传入,基本类型不会改变,obj和fn都是引用类型,所以传入的是引用,则对其属性改变,引用就会改变,所以就是1+5+6=12的结果。
**************
6.js判断对象类型的方法和优缺点
**typeof 不能细分出具体是什么object,基本类型可以。
**instanceof 必须实例才可以判断,基本类型不可以。
**Object.prototype.toString.call();可以较详细的判断出来,null和undefined分不出来(Null),NaN和Number分不出来(Number),[object,Number/Boolean/String/Object/Array/Function/Date/Null]
7.典型的js闭包问题,嵌套了三层fun函数,搞清楚每层fun是哪个fun函数
function fun(n, o) {
console.log(o)
return {
fun: function (m) {
return fun(m, n);
}
};
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);//undefined,0,0,0
var b = fun(0).fun(1).fun(2).fun(3);//undefined,0,1,2
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,0,1,1
console.log(o)
return {
fun: function (m) {
return fun(m, n);
}
};
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);//undefined,0,0,0
var b = fun(0).fun(1).fun(2).fun(3);//undefined,0,1,2
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,0,1,1
0 0
- 【面试】第一次面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试 总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- c语言的四个标准
- maven项目少lang的包
- 二分法学习总结
- MySql创建表
- 三星遭遇2016
- 面试总结
- Gradle for Android 学习笔记(一) 下载并安装gradle(Linux 环境),小白也能看懂的gradle教程
- ComponentName使用方法
- ubuntu16.04下的搜狗输入法不能输入中文(重启搜狗输入法)
- Java基本数据类型总结
- DirectX backface culling(背面剔除)
- hdu1081最大子矩阵和
- NoHttp之优雅的为参数签名和数据加密
- 欢迎使用CSDN-markdown编辑器