匿名函数有什么作用,最近在看新浪xweibo的代码,里面有个actions.js文件,就是一个大的匿名函数,这有什么用?
另外我没有找到任何一个php里面用到了这个actions.js,没有地方添加这个文件的引用,那这个js是怎么起作用的?刚开始做web开发,很多地方不明白,请各位赐教。

解决方案 »

  1.   


    有时候使用匿名函数避开变量名冲突,因为js是用函数划分变量作用域的,外面写个匿名函数,就可以使js变量不会跟全局变量冲突
      

  2.   

    代码我精简了一下,把函数的实现去掉了/*!
     * X weibo JavaScript Library v1.1
     * http://x.weibo.com/
     * 
     * Copyright 2010 SINA Inc.
     * Date: 2010/10/28 21:22:06
     */ 
    (function(X, $){
    var FALSE = false, TRUE = true,    R = X.request,
        Box = X.ui.MsgBox,
    getCfg = X.getCfg,
    getWb = X.getWb,
    doc = document,
        getText = X.lang.getText;X.use('action')
    /**
     * @class Xwb.mod.GlobalActionFilter
     * 全局动作拦截器
     * @static
     */
     
    /**
     * @property authFilter
     * 该拦截器检测登录用户是否具备执行当前动作的权限。<br/>
     * 目前检测的权限有:
      * <ul>
     * <li>
        登录权限
       </li>
     * </ul>
        登录权限:如果当前action.na未设置为true,则提示要求用户登录。<br/>
        登录类型由全局配置loginCfg属性指定。<br/>
        登录类型:
     * <ul>
     * <li>仅使用新浪帐号直接登录</li>
     * <li>仅使用原有站点帐号登录</li>
     * <li>使用新浪帐号与原有站点帐号并存方式登录</li>
     * </ul> */
    // 增加全局action拦截器,
    // 对于要求登录的action转至登录页面
    .addFilter(function( e, act){
        // 如果e:name未注册action或者action.na未设置为true
        // 则操作前要求用户登录

    }, TRUE)/**
     * @class Xwb.mod.PageActions
     * 公共action处理
     * @static
     *//**
     * @event sd
     * 发布微博弹框
     * @param {String} [m] 弹出时微博框内容
     */
    .reg('sd', function( e ){
        
    })
    /**
     * @event fw
     * 弹出微博转发框
     * @param {String} w 微博ID
     */
    .reg('fw', function( e ){
    })/**
     * @event fl
     * 加关注
     * @param {String} u 关注用户ID
     * @param {Number} t 动作类型
     * t值可为<br/>
      * <ul>
     * <li>1:用&lt;span class=&quot;followed-btn&quot;&gt;样式显示已关注;</li>
     * <li>2:用&lt;em&gt;显示已关注</li>
     * <li>其它为刷新当前页</li>
     * </ul>
     */
    .reg('fl', function( e ){
    })/**
     * @event ufl
     * 取消关注
     * @param {String} u 用户ID
     * @param {Number} [f] 动作类型
     * f值可为<br/>
      * <ul>
     * <li>1:显示“关注他”标签</li>
     * <li>其它为刷新当前页</li>
     * </ul>
     */
    .reg('ufl', function(e) {
    })/**
     * @event rs
     * 弹出举报对话框
     * @param {String} w 微博ID
     */
    .reg('rs', function(e){
    })
    /**
     * @event blm
     * 弹出屏蔽微博对话框
     * @param {String} w 微博ID
     */
    .reg('blm', function(e){
    })//刷新页面
    /**
     * @event rl
     * 刷新页面
     */
    .reg('rl', function(){
    location.reload();
    }, {na: TRUE})// 收藏, favourite
    /**
     * @event fr
     * 弹出收藏对话框
     * @param {String} w 微博ID
     */
    .reg('fr', function( e ){
    })/**
     * @event fr
     * 弹出取消收藏对话框
     * @param {String} w 微博ID
     * @param {Number} t 为1时当请求成功后将微博从列表移除,否则显示“收藏”按钮
     */
    .reg('ufr', function(e) {
    })/**
     * @event cm
     * 评论微博
     * @param {String} w
     */
    .reg('cm', function( e ){
    })// trun left 向左转
    .reg('tl', function(e) {
    }, {na:TRUE})// trun right 向右转
    .reg('tr', function(e) {
    }, {na:TRUE})//还原原来的缩略图片
    .reg('zo', function(e) {
    }, {na:TRUE})// zoom in 放大图片
    .reg('zi', function( e ) {
    }, {na:TRUE})// play video 播放视频
    .reg('pv', function(e) {
    }, {na:TRUE})//close video
    .reg('cv', function(e) {
    }, {na:TRUE})/**
     * @event dl
     * 弹出删除我发布的微博对话框
     * @param {String} w 微博ID
     */
    .reg('dl', function( e ){
    })//关闭活动
    .reg('clsevt', function(e){
    })
    //删除活动
    .reg('delevt', function(e){
    })/**
     * @event mop
     * TA的微博、粉丝页 “更多”按键
     */
    .reg('mop', function(e) {
    })/**
     * @event sdm
     * 发私信
     * @param {String} [c] 内容
     * @param {String} [n] 昵称
     */
    .reg('sdm', function( e ){
    })/**
     * @event rm
     * 回复私信
     * @param {String} [u] 用户ID
     * @param {String} [n] 昵称
     */
    .reg('rm', function( e ){
    })/**
     * @event dm
     * 删除私信
     * @param {String} m 私信ID
     */
    .reg('dm', function(e){
    })/**
     * @event dm
     * 删除指定用户的私信
     * @param {String} u 用户ID
     */
    .reg('dum', function(e){
    })/**
     * @event dbl
     * 删除黑名单
     * @param {String} u 用户ID
     */
    .reg('dbl', function(e) {
    })
    /**
     * @event dfan
     * 移除粉丝
     * @param {String} u 用户ID
     */
    .reg('dfan', function(e){
    })
    //关注话题
    .reg('addSubject',function(e){
    })
    //删除关注话题
    .reg('delSubject',function(e){
    });})(Xwb, $);
      

  3.   

    那像这个js,我都没有找到任何地方在引用他,但是确确实实这个js起作用了,他根据php模版里面的rel标志来起相应的作用,那我该怎么知道这个js是如何起作用的。另外js调试的话用什么来调试啊?
      

  4.   

    调试IE8+ chrome 按F12 ,firefox安装firebug
      

  5.   

    (function(){})()这是匿名函数自执行的写法,详细点说就是这样的写法是定义一个匿名函数,然后马上执行,也就是说他是自动执行的,并不需要别人来调用。主要的作用是为了避开变量名冲突。
      

  6.   

    给个简单的例子<!DOCTYPE HTML>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>test</title>
            </script>
        </head>
        <body>
            <script type="text/javascript">
    (function(){
    document.write("Hello World!");
    })();
            </script>
        </body>
    </html>
      

  7.   

    楼主的意思是另外一个独立的js文件,但没找到<script type="text/javascript" scr="xx.js"></script>
      

  8.   

    呃,问题没看清楚,尴尬。
    js文件是必须要先引入才能使用的,没有在页面上显示的引入,也可以用js动态引入的,典型的工具是require.js或steal.js,有兴趣的可以google。。
      

  9.   

    那个是自启动的匿名函数,就是会加载JS时就会跑一遍,写法就是function ({})()