首页 > 代码库 > 函数1、基本函数 2、作用域 3、闭包 4、面向对象

函数1、基本函数 2、作用域 3、闭包 4、面向对象

1、基本函数

JavaScript中函数基本上可以分为一下三类:

 1 // 普通函数
 2     function func(arg){
 3         return true;
 4     }
 5           
 6 // 匿名函数
 7     var func = function(arg){
 8         return "tony";
 9     }
10   
11 // 自执行函数
12     (function(arg){
13         console.log(arg);
14     })(‘123‘)

注意:对于JavaScript中函数参数,实际参数的个数可能小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。

2、作用域

JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。

切记:所有的作用域在创建函数且未执行时候就已经存在。

 1 function f2(){
 2     var arg= 111;
 3     function f3(){
 4         console.log(arg);
 5     }
 6      
 7     return f3;
 8 }
 9  
10 ret = f2();
11 ret();

注:声明提前,在JavaScript引擎“预编译”时进行。

更多:http://www.cnblogs.com/wupeiqi/p/5649402.html

3、闭包

闭包是指可以包含自由(未绑定到特定对象)变量的代码块。

「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」

由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。

 1 function f2(){
 2     var arg= [11,22];
 3     function f3(){
 4         return arg;
 5     }
 6     return f3;
 7 }
 8  
 9 ret = f2();
10 ret();

4、面向对象

 1 function Foo (name,age) {
 2     this.Name = name;
 3     this.Age = age;
 4     this.Func = function(arg){
 5         return this.Name + arg;
 6     }
 7 }
 8   
 9 var obj = new Foo(‘alex‘, 18);
10 var ret = obj.Func("sb");
11 console.log(ret);

对于上述代码需要注意:

  • Foo充当的构造函数
  • this代指对象
  • 创建对象时需要使用 new

上述代码中每个对象中均保存了一个相同的Func函数,从而浪费内存。使用原型和可以解决该问题:

 1 function Foo (name,age) {
 2     this.Name = name;
 3     this.Age = age;
 4 }
 5 Foo.prototype = {
 6     GetInfo: function(){
 7         return this.Name + this.Age
 8     },
 9     Func : function(arg){
10         return this.Name + arg;
11     }
12 }

 

函数1、基本函数 2、作用域 3、闭包 4、面向对象