国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

3個閉包面試題解析

ad6623 / 1716人閱讀

摘要:理解閉包形成的原因,理解定義時和運行時的區(qū)別。面試題請寫出輸出結果的解釋,第一個輸出這個對象。所以第一行輸出,面試題最基礎題變體一變體二變體三最基礎后運行定時器,此時循環(huán)已結束,為。變體依次秒輸出一個數(shù)字,閉包會使用循環(huán)的值。

理解閉包形成的原因,理解定義時和運行時的區(qū)別。

面試題1
var num = 1;
var o = {
    num: 2,
    add: function() {
        this.num = 3;
        console.log("add", this);
        (function() {
            console.log("closure", this);
            console.log(this.num);
            this.num = 4;
        })();
        console.log(this.num);
    },
    sub: function() {
        console.log(this.num);
    }
}
o.add();
console.log(o.num);
console.log(num);
var sub = o.sub;
sub();

// 請寫出輸出結果

zyx456的解釋:

01,o.add();

第一個console.log("add", this);//輸出o這個對象。

在對象方法中,方法中的this指向這個對象。

第一個this.num = 3;

表示:o.num =3;

02,匿名自執(zhí)行函數(shù)中的this,指向全局環(huán)境變量。為window。

所以

(function() {

?            console.log("closure", this);//這里的this是指向哪里?window

?            console.log(this.num);//1

?            this.num = 4;//window.num = 4;

})();

匿名自執(zhí)行函數(shù)的this.num為window.num。為1。

this.num = 4;//window.num = 4;

03,

console.log(o.num);//3,因為前面修改了o.num=3;


04,console.log(num);//4

這里,num為window.num。

05,var sub = o.sub;

sub();//4

zyx456:sub為函數(shù)。全局函數(shù)中的this指向全局環(huán)境,也就是window。

所以為window.num為4;

面試題2
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,?,?,?
var b = fun(0).fun(1).fun(2).fun(3);//undefined,?,?,?
var c = fun(0).fun(1);  c.fun(2);  c.fun(3);//undefined,?,?,?
//問:三行a,b,c的輸出分別是什么?

zyx456分析:

var a =fun(0);

首先輸出console.log(o);//o未定義,為undefined;

a =  {
   fun:function(m){
   return fun(m,0);
    }
}
a.fun(1);//返回 fun(1,0);=> console.log(0)=>0

a.fun(2);//返回fun(2,0);=>console.log(0)=>0

a.fun(3)//返回fun(3,0);=>console.log(0)=>0


所以:第一行輸出undefined,0,0,0

然后看第二行:var b = fun(0).fun(1).fun(2).fun(3);

fun(0)

首先輸出console.log(o);//o未定義,為undefined;

等效于

 {

   fun:function(m){
     return fun(m,0);

   }
}

fun(0).fun(1)

return fun(1,0)

fun(1,0)先輸出=>console.log(0)=>0

最后return結果為

 {
   fun:function(m){
       return fun(m,1);
    }
}


fun(0).fun(1).fun(2)

等同于

return fun(2,1)

fun(2,1)->輸出console.log(1);=>1

最后return結果為

{
 fun:function(m){
       return fun(m,2);
       }
}

fun(0).fun(1).fun(2).fun(3)

等同于

return fun(3,2)

fun(2,1)->輸出console.log(2);=>2

最后return結果為

{

 fun:function(m){
?        return fun(m,2);
?    }
}


所以:第一行輸出undefined,0,1,2

最后看第三行:var c = fun(0).fun(1); c.fun(2); c.fun(3);

var c=fun(0).fun(1);

同第二行的b。會輸出undefined和0,

c為

 {
    fun:function(m){
      return fun(m,1);
    }
}

c.fun(2)

return fun(2,1)=>輸出1。可以看第二行b。

c.fun(3)

return fun(3,1)=>輸出1。可以看第二行b。

所以:第一行輸出undefined,0,1,1

面試題3
// 最基礎題
for(var i = 1; i < 10; i ++){
    setTimeout(function(){
        console.log(i);
    }, 1000);
}

// 變體一
for (var i = 1; i < 10; i++) {
    (function(i){
        setTimeout(function(){
            console.log(i);
        }, i * 1000);
    })(i);
}

// 變體二
for (var i = 1; i < 10; i++) {
    (function(){
        setTimeout(function(){
            console.log(i);
        }, i * 1000);
    })();
}

// 變體三
for (var i = 1; i < 10; i++) {
    (function(){
        setTimeout(function(i){
            console.log(i);
        }, i * 1000);
    })();
}

zyx456:

最基礎:

1s后運行定時器,此時for循環(huán)已結束,i為10。

變體1:

依次1秒輸出一個數(shù)字,閉包會使用for循環(huán)的值。

依次輸出1~9

變體2:

依次每隔1秒輸出10,10,10.。。。。

變體3:

在匿名自執(zhí)行函數(shù)中,i未定義。所以輸出9個undefined。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106027.html

相關文章

  • 一道JS前端閉包面試解析

    摘要:當執(zhí)行時,對象也有一個閉包,引用了函數(shù)及外層函數(shù)變量,執(zhí)行輸出結果為能看懂前面的代碼執(zhí)行解釋,理解上面的代碼執(zhí)行輸出就不會有問題了 問題 代碼A function fun(n,o){ console.log(o); return { fun:function(m){//[2] return fun(m,n);//[1] ...

    malakashi 評論0 收藏0
  • 新鮮出爐的8月前端面試

    摘要:前言最近參加了幾場面試,積累了一些高頻面試題,我把面試題分為兩類,一種是基礎試題主要考察前端技基礎是否扎實,是否能夠將前端知識體系串聯(lián)。 前言 最近參加了幾場面試,積累了一些高頻面試題,我把面試題分為兩類,一種是基礎試題: 主要考察前端技基礎是否扎實,是否能夠將前端知識體系串聯(lián)。一種是開放式問題: 考察業(yè)務積累,是否有自己的思考,思考問題的方式,這類問題沒有標準答案。 基礎題 題目的答...

    qingshanli1988 評論0 收藏0
  • 【Step-By-Step】高頻面試深入解析 / 周刊04

    摘要:關于點擊進入項目是我于開始的一個項目,每個工作日發(fā)布一道面試題。的狀態(tài)由決定,分成以下兩種情況只有的狀態(tài)都變成,的狀態(tài)才會變成,此時的返回值組成一個數(shù)組,傳遞給的回調函數(shù)。 關于【Step-By-Step】 Step-By-Step (點擊進入項目) 是我于 2019-05-20 開始的一個項目,每個工作日發(fā)布一道面試題。每個周末我會仔細閱讀大家的答案,整理最一份較優(yōu)答案出來,因本人...

    youkede 評論0 收藏0
  • 一道js閉包面試的學習

    摘要:然后最外層這個函數(shù)會返回一個新對象,對象里面有一個屬性,名為,而這個屬性的值是一個匿名函數(shù),它會返回。 最近看到一條有意思的閉包面試題,但是看到原文的解析,我自己覺得有點迷糊,所以自己重新做一下這條題目。 閉包面試題原題 function fun(n, o) { // ① console.log(o); return { // ② fun: function(m) ...

    plus2047 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<