1.考察對(duì)內(nèi)存空間理解
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.考察對(duì)函數(shù)傳參的理解
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事件循環(huán)機(jī)制
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.實(shí)現(xiàn)add(1)(2)輸出3宇挫,考察閉包的實(shí)現(xiàn)
function add(x){
var sum =x;
return function(y){
return sum +=y;
}
}
8.拓展第7題这吻,實(shí)現(xiàn)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
//并沒(méi)有看懂等著hexuebin給我講呢
9.數(shù)組排序
var a =[1,10,4,6,11,33,55];
a.sort(function(a,b){
return a-b;
})
10.數(shù)組亂序
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.箭頭函數(shù)的注意點(diǎn)
(1)函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象摇邦,而不是使用時(shí)所在的對(duì)象巩检。
(2)不可以當(dāng)作構(gòu)造函數(shù)术幔,也就是說(shuō)元咙,不可以使用new命令梯影,否則會(huì)拋出一個(gè)錯(cuò)誤。
(3)不可以使用arguments對(duì)象庶香,該對(duì)象在函數(shù)體內(nèi)不存在甲棍。如果要用,可以用 rest 參數(shù)代替赶掖。
(4)不可以使用yield命令救军,因此箭頭函數(shù)不能用作 Generator 函數(shù)。
下面對(duì)(1)做出解釋?zhuān)?/p>
function foo() {
setTimeout(() => {
console.log('id:', this.id);
}, 100);
}
var id = 21;
foo.call({ id: 42 });
如果是普通函數(shù)倘零,執(zhí)行時(shí)this應(yīng)該指向全局對(duì)象window,這時(shí)應(yīng)該輸出21戳寸。但是呈驶,箭頭函數(shù)導(dǎo)致this總是指向函數(shù)定義生效時(shí)所在的對(duì)象(本例是{id: 42}),所以輸出的是42疫鹊。
12.有1到n連續(xù)的n個(gè)數(shù)袖瞻,打亂其順序司致,隨意拿走一個(gè)數(shù),判斷出拿走的是哪個(gè)數(shù)
利用數(shù)組的find方法
先把1到n個(gè)數(shù)轉(zhuǎn)為數(shù)組a
a.find(function(value,key){
if(value - a[key+1] ==-2){
return true;
}
});
此時(shí)返回的值+1就是拿走的那個(gè)值
13.怎么判斷塊級(jí)作用域
任何一對(duì)花括號(hào)中的語(yǔ)句集都屬于一個(gè)塊聋迎,在這之中定義的所有變量在代碼塊外都是不可見(jiàn)的脂矫,我們稱(chēng)之為塊級(jí)作用域
14.塊級(jí)作用域和函數(shù)聲明提升的問(wèn)題
function functions(flag) {
if (flag) {
function getValue() { return 'a'; }
} else {
function getValue() { return 'b'; }
}
return getValue();
}
console.log(function functions(true));
//答案是b
分析如下:因?yàn)樵趈s是沒(méi)有塊級(jí)作用域的,又因?yàn)楹瘮?shù)聲明提升的原因霉晕,上面的這段代碼變相當(dāng)于:
function functions(flag) {
function getValue() { return 'a'; };
function getValue() { return 'b'; }
if (flag) {
} else {
}
return getValue();
}
console.log(function functions(true));
//因此無(wú)論flag為何值庭再,返回的方法始終為重寫(xiě)后的方法。
那么怎么才能解決這個(gè)問(wèn)題呢...
function functions(flag) {
if (flag) {
var getValue = function () { return 'a'; }
} else {
var getValue = function () { return 'b'; }
}
return getValue();
}
不再用函數(shù)聲明牺堰,而是用函數(shù)表達(dá)式的方法拄轻,因?yàn)楹瘮?shù)表達(dá)式不會(huì)提升,因此只有當(dāng)邏輯只想到這兒的時(shí)候才會(huì)執(zhí)行伟葫。所以就解決問(wèn)題啦恨搓。
15.Promise有自身有哪幾種方法
Promise.all(),Promise.race(),Promise.resolve(),Promise.reject(),
詳情見(jiàn):http://es6.ruanyifeng.com/#docs/promise
凡普金科和閃銀奇異