JS面試 第四章 閉包和作用域

2022-09-14 09:36:10 字數 3423 閱讀 2399

說一下變數提公升的理解

說明this幾種不同的使用場景

建立10個標籤,點選的時候彈出來對應的序號

如何理解作用域

實際開發中閉包的應用

範圍:一段或者乙個函式

注意:函式宣告和函式表示式的區別

函式宣告

fn()

;// 不會報錯,因為函式宣告會提公升

functionfn(

)

函式表示式

fn1()

;// 會報錯,fn1會被當做變數定義,會提公升相當於var fn1 = undefined,在執行fn1();

// 以下均為函式表示式,函式表示式本質上即為變數定義

var a =

100;

varfn1

=function()

假如下列**在乙個中,在乙個中要定義乙個全域性的執行上下文,在執行第1行**之前,會把所有的變數宣告和函式宣告都執行一遍,執行順序如下:

console.

log(a)

;// undefined

var a =

100;fn(

'zhangsan');

// 'zhangsan', 20

function

fn(name)

// 全域性

// var a = undefined;

console.

log(a)

;var a =

100;fn(

'zhangsan');

function

fn(name)

}

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

var a =

}// 只看到這裡不能確認this到底是什麼

a.fn()

;// this === a

a.fn.

call()

;// this ===

var fn1 = a.fn;

fn1();

// this === window

function

foo(name)

;this

.name = name;

// return this;

}var f =

newfoo

('zhangsan'

);

var obj =

}obj.

printname()

;

functionfn(

)fn()

;

function

fn1(name, age)

// call表示為this,'zhangsan'為第1個引數,20為第2個引數,最常用

fn1.

call(,

'zhangsan',20

);fn1.(,

'zhangsan',20

);// 使用bind修改預設this,.bind必須是函式表示式

varfn2

=function

(name, age)

.bind()

fn2(

'zhangsan',20

)

// 沒有塊級作用域if(

true

)console.

log(name)

;// 'zhangsan'

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

var a =

100;

functionfn(

)console.

log(

'global'

, a)

;// 全域性 a = 100fn(

);// 函式 a = 200

var a =

100functionfn(

)fn()

;

var a =

100;

functionf1(

)f2()

;}f1(

);

函式作為返回值

functionf1(

)}var f1 =f1(

);// a是全域性變數,不會影響到函式中定義的區域性變數

var a =

200;

// 不是看此處執行時的作用域,而是回到其定義處的作用域f1(

);// 100

函式作為引數傳遞

functionf1(

)}var f1 =f1(

);function

f2(fn)

f2(f1)

;

在函式外面,根本不可能修改掉函式中定義的變數的值,以保證資料的安全不被汙染

說一下變數提公升的理解

說明this幾種不同的使用場景

建立10個標籤,點選的時候彈出來對應的序號

錯誤寫法

var i, a

for(i =

0; i <

10; i++))

document.body.

(a);

}

正確寫法

var i;

for(i =

0; i <

10; i++))

document.body.

(a);})

(i)}

如何理解作用域

實際開發中閉包的應用

function

isfirstload()

else}}

var firstload =

isfirstload()

;firstload(10

);// true

firstload(10

);// false

firstload(20

);// true

firstload(20

);// false

js第四章作用域

一 動態的屬性 建立了乙個變數並且儲存在了變數person中 var person new object 為該物件新增了乙個名為name的屬性,將字串值 nicholas 賦值給name這個屬性 person.name nicholas alert person.name nicholas 只能給引...

第四章 變數,作用域和記憶體問題

檢驗型別 typeof 操作符 是確定乙個變數時字串,數值,布林值,還是undefined的最佳工具。如果變數的值是乙個物件或者null,那麼操作符都只會返回object,不能準確的區分。instanceof操作符。語法 result variable instanceof constructor ...

groovy學習歷程(第四章 閉包)

閉包 閉包是一段匿名函式,由lambda表示式派生。傳統方式求解 package groovy 求1到某個特定的數n之間所有偶數的和 def sum n total println sum of even numbers from 1 to 10 is 求1到某個特定的數n之間所有偶數的積 def ...