zoukankan      html  css  js  c++  java
  • 函数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 }
  • 相关阅读:
    VoltDB公布4.0版本号,大步提高内存实时分析速度,进军操作数据库市场
    [AngularJS] angular-formly: Default Options
    [AngularJS] angular-formly: expressionProperties
    [Whole Web, Nods.js, PM2] Passing environment variables to node.js using pm2
    [ES6] 23. Rest Parameters & Spread Parameters
    [Whole Web, Node.js, PM2] Restarting your node.js app on code change using pm2
    [Whole Web, Node.js PM2] Loggin with PM2
    [Whole Web, Node.js, PM2] Configuring PM2 for Node applications
    [ES6] 22. Const
    [ES6] 21. ESNext, ES6-Shim & Node
  • 原文地址:https://www.cnblogs.com/shiluoliming/p/6515840.html
Copyright © 2011-2022 走看看