JavaScript函数

定义

JavaScript 函数是执行特定目的的代码块。
如果一个函数没有return语句,则它默认返回undefined

1
function f(形参1,形参2) {
2
  //执行的代码
3
}
4
f('实参1','实参2');

函数声明 - 命名函数

1
function fn() {
2
  
3
}

函数表达式

1
var x = function(a,b){
2
  return a * b;
3
}

构造函数

函数同样可以通过内置的JavaScript函数构造器Function来定义。

1
var foo = new Function('a','b','return a * b');
2
var c = foo(1,2);

匿名函数

1
var fn = function() {
2
  
3
}

自调用函数 - 当函数书写完成之后立即调用

1
(function() {
2
  
3
})()

函数表达式可以 “自调用”。
自调用表达式会自动调用。
如果表达式后面紧跟 () ,则会自动调用。
不能自调用声明的函数。

Function 属性

arguments

以数组形式获取传入函数的所有参数。arguments对象不是一个Array。它是一个类数组对象,可以转换为一个真正的Array

1
function foo() {
2
  var args = Array.prototype.slice.call(arguments);
3
  // [1,2,3]
4
}
5
foo(1,2,3);

函数闭包

简单的闭包示例

当内部函数引用了外部函数的数据,并且执行函数,此时就产生了闭包。
常见创建闭包的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。

1
function fn(a,b) {
2
  return function() {
3
    return a+b;
4
  }
5
}
6
console.log(fn(1,2)());

fn 函数返回的一个匿名函数,它未接受参数,直接从执行环境中获取。

闭包的缺点与缺点

闭包的优点就是缺点,因为闭包把局部变量常驻在内存中,可以避免使用全局变量。全局变量污染导致多个使用公共变量的模块不可预测,所以使用私有的封装的局部变量
进行隔离。
同时由于闭包内的局部变量不会立即销毁,所以可能占用更多的内存,过度使用闭包会导致性能下降。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!