此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

自执行函数笔记

了解自执行函数之前,首先得理清一下函数的基本概念

1.函数声明:function aa(){};

使用function关键字声明一个函数并指定函数名

2.函数表达式:var a= function(){};

使用function关键字声明一个函数并将其赋予一个变量

(

值得注意的是 var a= function b(){}这样的形式统一按照var a= function (){}处理,如果调用b(),会抛出异常!

)

3.匿名函数: function(){}

匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等,它属于一种函数表达式

 

函数声明与函数表达式的区别如下:

1.Javascript引擎在解析js代码时,会优先解析函数声明所创建的函数,即"函数声明提升"现象,而函数表达式则会在Javascript引擎执行到它所在的行时才会进行解析;

2.函数表达式创建的变量在后面加上括号便立即调用此函数,如a(),函数声明的调用方式是 函数名+();

eg:

a();
function a(){
     console.log(1)
};
b();
var b= function(){
     console.log(2)
};

输出:

1

报错,函数表达式不会提前解析

 

接下来就可以介绍自执行函数了,一般它的格式如下:

(function (a){}(a))或(function (a){})(a),那么它属于函数声明还是函数表达式?

由上面的两种格式可知,函数对象后面直接机上括号就能执行,这种情况下,它属于函数表达式~

 

函数表达式的格式:

(function(a){
      console.log(a); 
    })(1);
     
    (function(a){
      console.log(a); 
    }(2));
     
    !function(a){
      console.log(a); 
    }(3);
    
    +function(a){
      console.log(a);
    }(4);
    
    -function(a){
      console.log(a); 
    }(5);

输出:

1

2

3

4

5

由此可只在函数前加上!+ -等运算符或使用()都能将之转换为自执行函数,但一般情况下,习惯使用()

 

自执行函数的一般用途:

javascript中没用私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉,

根据javascript函数作用域链的特性,可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个“容器”,

“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,

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

JQuery使用的就是这种方法,将JQuery代码包裹在( function (window,undefined){…jquery代码…} (window)中,在全局作用域中调用JQuery代码时,可以达到保护JQuery内部变量的作用。

 

posted @ 2017-01-25 11:22  炎泽  阅读(275)  评论(0编辑  收藏  举报