##普通函数 使用关键字function
+函数名的形式。
- 同名函数:不存在函数重载,后面的函数会覆盖前面的函数。
- arguments对象:无论函数的参数情形如何,参数最终都会嵌入至arguments对象。
- 函数默认返回值
undefined
。
##匿名函数 直接通过关键字function
实现函数的构造。
- 变量匿名函数:函数也是对象,可以将函数体赋值给变量,从而实现多次调用。
var func = function(){}
- 无名称匿名函数
(function(){})();
:只能执行一次。
##闭包函数
假设,函数func1()内部声明函数func2(),函数func2()引用了函数func2()之外的变量,并且函数func1()的返回值为函数func2()的引用。那么,函数func2()就是闭包函数。
闭包->作用域「全局变量占用的资源只有当页面变换或者浏览器关闭之后才会释放」->临时变量占用了全局资源,因此暂时不会被GC回收
閉包帶來的好處:外部環境是無法一個函數的內部變量,但可以通過閉包來實現操控,從而達到某些高級面向對象編程語言如C#的private
關鍵字效果。
function func1() { var private_value = ""; var func2 = function () { if (arguments[0]) { private_value += arguments[0]; } console.log(private_value); } return func2; } var closure1 = func1(); var closure2 = func1(); closure1("C#"); closure2("C++"); closure1("linux");