函式 函式表示式 作用域 閉包

2021-09-13 11:05:00 字數 1154 閱讀 5303

var f = function () 

function f()

函式宣告和函式表示式的主要區別是,函式宣告會被前置,而函式表示式作為變數,會被提公升。

下方是js執行時的邏輯

// 前置和變數提公升

var f;

function f()

f = function ()

var f = function () 

function f()

f();

上方**直接結果為:1

一道題考察閉包(迴圈閉包)

var o = ;

for(var i = 0; i < 5; i++)

}o[3]();

以上**執行結果為:5

如何改進以上**,使o[1]=>1; o[2]=>2; ..., 那就是利用閉包咯

var o = ;

for(var i = 0; i < 5; i++)

})(i);

}o[3]();

以上**執行結果為:3

解析:

var o = ;

for(let i = 0; i < 5; i++)

}

閉包第二種應用場景(封裝變數)
(function () ;

export.getname = function ()

export.setname = function (newname)

window.export = export;

})();

呵呵,只有通過釋放出來的export才能訪問私有變數

閉包的缺陷

閉包中的變數因為可能還會被內部函式用到,因此所佔記憶體一直不能被釋放,導致記憶體浪費

函式表示式 閉包

有權訪問另乙個函式作用域內變數的函式。常見的方式就是在乙個函式的內部建立另外乙個函式。functiona b a a內的b可以訪問a的內部變數color 閉包只能取到包含函式中任何變數的的最後乙個值。function a return arr console.log a 0 10 console.l...

函式4 函式表示式 閉包

閉包 函式中的函式 用於獲取函式內部變數的函式 function a return b console.log info 報錯 info is not defined console.log a hello 在全域性作用域中,如果想訪問a函式中的變數info,直接訪問會報錯,因為a函式體是個作用域,...

函式表示式(1) 含閉包

定義函式的方法有兩種,一種是函式宣告,一種是函式表示式 函式宣告 function 函式表示式 他們兩個不同的地方在於,函式宣告會有乙個提公升 相當於會在執行 前讀取函式宣告 而函式表示式不會有 函式宣告 function 函式表示式 在函式表示式中,就像變數一樣,會被賦予undefined值,而不...