JS作用域和閉包核心面試題分析

2022-04-02 14:48:03 字數 3329 閱讀 4405

作用域和閉包-執行上下文:

變數提公升(寫**時千萬不要先使用再定義)

<

script

>

console.log(a);

//undefined

vara=10

; fn(

'cyy',

18);

function

fn(name,age)

script

>

函式宣告存在提公升,函式表示式不存在提公升

<

script

>

fn1();

//函式宣告 不會報錯

function

fn1(){}

fn2();

//函式表示式 報錯

作用域和閉包-this:

this要在執行時才能確認值,定義時無法確認

<

script

>

vara

= }

a.fn();

//this===a

a.fn.call();

//this===

varfn1

=a.fn;

fn1();

//this===window

script

>

this:

作為建構函式執行

作為物件屬性執行

作為普通函式執行

<

script

>

//建構函式

function

foo(name)

varf

=new

foo(

'cyy');

//作為乙個物件的屬性

varobj

= }

obj.fn();

//普通函式的this

作用域和閉包-作用域:

沒有塊級作用域,只有函式和全域性作用域

<

script

>

//無塊級作用域if(

true

) console.log(name);

//有全域性和函式作用域

//作用域鏈

作用域和閉包--閉包:

閉包的使用場景:

1、函式作為返回值

2、函式作為引數傳遞

<

script

>

//函式作為返回值

function

f1()

}varf1

=f1();

vara

=200

; f1();

//100

//函式作為引數傳遞

function

f2()

}varf2

=f2();

function

f3(fn)

f3(f2);

//100

script

>

作用域和閉包--解題:

<

script

>

//錯誤的寫法

//點選結果都是10

vari;

for(i=0

;i<

10;i

++))

}//正確寫法,自執行的匿名函式形成函式作用域

vari;

for(i=0

;i<

10;i

++))

})(i);

}script

>

<

script

>

//閉包的應用

function

isfirstload()

else}}

varfirstload

=isfirstload();

console.log(firstload(

10));

//true

console.log(firstload(

10));

//false

console.log(firstload(

20));

//true

script

>

JS閉包 面試題

function setobj p p.name bb var p setobj p console.log p 程式的執行結果是aa 匿名函式的this一般是指向window var number 2 var obj var fn1 obj.fn1 console.log number 匿名函式呼...

js閉包面試題

請看以下 在輸出臺的輸出情況 答案是4400,4401,4399,4400 首先,test函式做了什麼?test在自己的函式作用域內建立乙個變數n,以及乙個函式add,這時add就作為乙個閉包,它可以在外部訪問到test內部的變數n,並對其進行加法。然後test返回乙個物件,這個物件有乙個n變數以及...

js 作用域和閉包

作用域應用的特色情況,有兩種表現 自由變數的查詢,在函式定義的地方,向上級作用域查詢不是在執行的地方 函式作為返回值 function create const fn create const a 200 fn 100 函式作為引數 function print fn const a 100 fun...