作用域和閉包-執行上下文:
變數提公升(寫**時千萬不要先使用再定義)
<函式宣告存在提公升,函式表示式不存在提公升script
>
console.log(a);
//undefined
vara=10
; fn(
'cyy',
18);
function
fn(name,age)
script
>
<script
>
fn1();
//函式宣告 不會報錯
function
fn1(){}
fn2();
//函式表示式 報錯
作用域和閉包-this:
this要在執行時才能確認值,定義時無法確認
<this:script
>
vara
= }
a.fn();
//this===a
a.fn.call();
//this===
varfn1
=a.fn;
fn1();
//this===window
script
>
作為建構函式執行
作為物件屬性執行
作為普通函式執行
<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...