1.考察对内存空间理解
let a = {v:'temp'};
let b =a;
a=a.x={v:'temp'};
console.log(a);
//a: {v:'temp'}
console.log(b);
//b:{v:'temp',x:{v:'temp'}}
2.考察对函数传参的理解
let a =1;
let b ={a:1};
function sum(m,n){
m=2;
n.a=2;
}
sum(a,b);
console.log(a,b);
//1,{a:2}
3.考察js事件循环机制
setTimeout(function(){console.log(0)},0);
Promise.resolve().then(function(){console.log(5)});
console.log(3);
for(var i=1-;i<15;i++){
setTimeout(function(){console.log(i)},i);
}
//3,5,0,15,15,15,15,15
4.
(function(num){
console.log(num);
var num =10;
}(100));
//100
5.
(function(num){
console.log(num);
var num=10;
function num(){};
}(100));
//function num(){};
6.
var num=100;
var obj={
num:200,
inner:{
num:300,
print:function(){
console.log(this.num);
}
}
};
obj.inner.print();//300
var func = obj.inner.print;
func();//100
(obj.inner.print)();//300
(obj.inner.print=obj.inner.print)();//100
7.实现add(1)(2)输出3,考察闭包的实现
function add(x){
var sum =x;
return function(y){
return sum +=y;
}
}
8.拓展第7题,实现add(1)=>1,add(1)(2)=>3,add(1)(2)(3)=>6等
function add(x) {
var sum = x;
var tmp = function (y) {
sum = sum + y;
return tmp;
};
tmp.toString = function () {
return sum;
};
return tmp;
}
console.log(add(1)(2)(3)); //6
console.log(add(1)(2)(3)(4)); //10
//并没有看懂等着hexuebin给我讲呢
9.数组排序
var a =[1,10,4,6,11,33,55];
a.sort(function(a,b){
return a-b;
})
10.数组乱序
var a= [1,2,3,4,5,6,7,8];
a.sort(function(a,b){
var sign = 1;
sign = (Math.random()>0.5)?1:-1;
return(a-b)*sign;
})
11.箭头函数的注意点
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
下面对(1)做出解释:
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
var id = 21;
foo.call({ id: 42 });
如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。但是,箭头函数导致this总是指向函数定义生效时所在的对象(本例是{id: 42}),所以输出的是42。
12.有1到n连续的n个数,打乱其顺序,随意拿走一个数,判断出拿走的是哪个数
利用数组的find方法
先把1到n个数转为数组a
a.find(function(value,key){
if(value - a[key+1] ==-2){
return true;
}
});
此时返回的值+1就是拿走的那个值
13.怎么判断块级作用域
任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域
14.块级作用域和函数声明提升的问题
function functions(flag) {
if (flag) {
function getValue() { return 'a'; }
} else {
function getValue() { return 'b'; }
}
return getValue();
}
console.log(function functions(true));
//答案是b
分析如下:因为在js是没有块级作用域的,又因为函数声明提升的原因,上面的这段代码变相当于:
function functions(flag) {
function getValue() { return 'a'; };
function getValue() { return 'b'; }
if (flag) {
} else {
}
return getValue();
}
console.log(function functions(true));
//因此无论flag为何值,返回的方法始终为重写后的方法。
那么怎么才能解决这个问题呢...
function functions(flag) {
if (flag) {
var getValue = function () { return 'a'; }
} else {
var getValue = function () { return 'b'; }
}
return getValue();
}
不再用函数声明,而是用函数表达式的方法,因为函数表达式不会提升,因此只有当逻辑只想到这儿的时候才会执行。所以就解决问题啦。
15.Promise有自身有哪几种方法
Promise.all(),Promise.race(),Promise.resolve(),Promise.reject(),
详情见:http://es6.ruanyifeng.com/#docs/promise
凡普金科和闪银奇异
网友评论