• JavaScript匿名类整理学习笔记


    以下为总结
    在开源的JavaScript框架中能看到很多这样语法结构
    (function(){
    }
    )()
    比如我最近看的jQuery,及chediter。刚开始的时候我看到这样的结果有点奇怪,它是怎么执行的,并且这是什么样的语法结构,最近偶尔看闭包的时候,才发现原来这是JavaScript种匿名函数(看到这个有点汗,java的匿名类见过,就从来没想到JavaScript中会有匿名函数,也是学的不够牢固)。
    现在我们了解到以上是JavaScript匿名函数的语法结构,怎么声明函数,匿名函数JavaScript是怎么执行的,匿名函数的代码模式。这些问题

    就是我们接下来要探讨的问题。
    第一:怎么声明函数。
    方法一  function functionName( arguments ){ body }
    在JavaScript函数典型函数,也叫有名函数(因为它存在functionName)。
    function fun(){ alert( "test" ) }//  1
    fun();//2
    第1行这是JavaScript声明有名函数最常见的方法,也是我们个人开发中最常用的声明方式。
    该语法结构为声明一个名叫fun的函数(注意JavaScript只会编译该函数,并生成fun函数的对象,不会执行该函数)。
    而第二句为调用该函数即执行该函数。
    方法二 var fun = function ( arguments  ){ body  } //又称函数字面量
    var fun = function( ){ alert( "test" ) }
    该函数复制给变量fun,其实后面的函数为一个匿名函数
    方法三 var fun=new Function([arguments], Body);
    将函数复制给变量fun
    注意该种方式会存在性能问题,在执行 new Function方法时它不是静态编译和执行,而是动态编译和执行,即当执行new Function时才编译函数主体,并生成函数对象,每调用一次就执行编译及执行的过程【类似于函数eval()】,它比其他方是多了编译过程【会使用浏览器的编译器

    】,如果再循环体中执行效率会比较低;上面三种定义函数方式中,后两种方式是采用匿名函数的方式什么的变量。
    第二:匿名函数是怎样执行的。
    对于语法结构

    Js代码  收藏代码
    1. (function(){  
    2.     alert( "test" );  
    3. }  
    4. )()  

    其实是由两部分组成
    (function(){
        alert( "test" );
    }
    )表示的为匿名函数的定义。
    而对于接在后面的"()"代表的意思为执行定义的匿名函数。
    上述的语法结构也等价于以下的语法结构

    Js代码  收藏代码
    1. var test=function(){  
    2.   alert( "test" );  
    3. //函数内容  
    4. };//声明匿名类并将匿名函数赋予变量test。  
    5. test();//执行test  

    可以看出匿名类可以直接在类后面接()代表执行,这也是我们在jQuery等开源的框架时,导入相应的包以后就可以直接使用对象的原因。它已经在匿名函数中完成相应的初始化及封装。
    知道匿名类是怎么执行的,那我们常用的匿名函数有哪些呢。
    第三:匿名函数调的代码模式
    hedger wang介绍了几种匿名函数的代码模式:
    错误模式:其无法工作,浏览器会报语法错。

    Js代码  收藏代码
    1. function(){  
    2.   alert(1);  
    3. }();  

    以上错误原因是()能更改表达式的优先级,使用()后,将先执行()里面的代码,而对于表达式()对于JavaScript编译不过去的。
    函数字面量:首先声明一个函数对象,然后执行它。 也称为立即执行函数。

    Js代码  收藏代码
    1. (function(){  
    2.   alert(1);  
    3. } ) ( );  

    编译一定能通过,第一()是函数定义,而第二个()代表执行第一括号里面的内容
    优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。

    Js代码  收藏代码
    1. function(){  
    2.   alert(1);  
    3. } ( ) );  

     Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。

    Js代码  收藏代码
    1. void function(){  
    2.   alert(1);  
    3. }()  

    这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种以及上面提到的 new Funtion( )的定义方式。

         灵活的配合var关键字,匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。也能增加代码的可读写行,减少代码量,提高程序的性能。

     
  • 相关阅读:
    存储过程分页
    连接数据库
    绑定数据
    有关最近做的项目中用到的日期控件
    循环累加 由for _foreach
    打印gridview 中的所有内容
    list<>操作
    创建表两个主键外键~~~
    连接数据库sql server 2005
    WPF控件编程
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3833988.html
Copyright © 2020-2023  润新知