zoukankan      html  css  js  c++  java
  • 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,而不会造成全局变量的污染。也能增加代码的可读写行,减少代码量,提高程序的性能。

     
  • 相关阅读:
    poj 3280 Cheapest Palindrome(区间DP)
    POJ 2392 Space Elevator(多重背包)
    HDU 1285 定比赛名次(拓扑排序)
    HDU 2680 Choose the best route(最短路)
    hdu 2899 Strange fuction (三分)
    HDU 4540 威威猫系列故事――打地鼠(DP)
    HDU 3485 Count 101(递推)
    POJ 1315 Don't Get Rooked(dfs)
    脱离eclipse,手动写一个servlet
    解析xml,几种方式
  • 原文地址:https://www.cnblogs.com/xiaochao12345/p/3833988.html
Copyright © 2011-2022 走看看