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