var f = function () { } function f() { }
函數聲明和函數表達式的主要區別是,函數聲明會被前置,而函數表達式做爲變量,會被提高。面試
// 前置和變量提高 var f; function f() { } f = function () { }
var f = function () { console.log(1) } function f() { console.log(2) } f();
上方代碼直接結果爲:1閉包
var o = []; for(var i = 0; i < 5; i++){ o[i] = function () { console.log(i) } } o[3]();
以上代碼執行結果爲:5函數
var o = []; for(var i = 0; i < 5; i++){ (function (i) { o[i] = function () { console.log(i); } })(i); } o[3]();
以上代碼執行結果爲:3spa
var o = []; for(let i = 0; i < 5; i++){ o[i] = function () { console.log(i) } }
(function () { var name = 'LHX'; var age = 30; var export = {}; export.getName = function () { return name; } export.setName = function (newName) { name = newName; } window.export = export; })(); 只有經過釋放出來的export才能訪問私有變量
閉包中的變量由於可能還會被內部函數用到,所以所佔內存一直不能被釋放,致使內存浪費code