函数 函数声明 函数表达式 函数立即执行

208 阅读3分钟

概念: 函数声明 函数表达式 匿名函数 匿名函数本身也是一个闭包

闭包函数 “定义在一个函数内部的函数”


  闭包就是能够读取其他函数内部变量的函数。
  由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,
  因此可以把闭包简单理解成“定义在一个函数内部的函数”。

闭包函数最大用处有两个,一个是可以读取函数内部的变量,另一个是让这些变量的值始终保持在内存中

使用闭包的注意点: 1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。 注:内存泄漏:某种程序未释放或无法释放,造成内存的浪费,会导致程序运行速度减慢甚至系统崩溃。内存溢出:内存不够用。运行某种程序消耗的内存大于实际的内存,导致内存不够用,有时会自动关闭系统,重新启动系统释放一部分内存才能让系统正常运行。

2)闭包会在父函数外部改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

1.函数声明:
function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。

2.函数表达式 var fnName = function () {…};
使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,
叫函数表达式,这是最常见的函数表达式语法形式。


3.匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,
匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。

在理解了一些函数基本概念后,回头看看( function(){…} )()和( function (){…} () )这两种立即执行函数的写法,要在函数体后面加括号就能立即调用。
function前面加!、+、 -甚至是逗号等到都可以起到函数定义后立即执行的效果。

(function(){…} )()内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。

(function () {  
  // ...  
})();  

(1)标准写法

(function (window, document, undefined) { // })(window, document);

调用方法一:


var logMyName = function (name) {  
  console.log(name);  
};  
logMyName('李四');   

调用方法二:

var logMyName = (function (name) {  
  console.log(name);  
})('王五');  

还可以这样用:


!function () {  
  // ...  
}();  
  
+function () {  
  // ...  
}();  
  
-function () {  
  // ...  
}();  
  
~function () {  
  // ...  
}();