javascript - 在项目中看到这样的代码,不知道是什么意思
PHP中文网
PHP中文网 2017-04-11 11:51:12
[JavaScript讨论组]
var Names = (function () { 
    function Names() {}       
    Names.HOME = "home";
    return Names;
})();
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(6)
阿神

一个匿名函数

阿神

通常用这种方法在js实现类,避免污染全局空间。

例如下面这段Type Script代码:

class Names {
    static HOME = "home";
}

编译之后生成的JS:

var Names = (function () {
    function Names() {
    }
    return Names;
}());
Names.HOME = "home";

差别就是Names.HOME = "home";的位置。

大家讲道理

不是很理解,
感觉是想构造一个合成类型的实例,这个实例包含一个属性和一个初始化行为

伊谢尔伦

这个写法叫IIFE。立即执行表达式!

怪我咯

在匿名函数中定义了Names函数,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”
理论上创建一个匿名函数并立刻执行可以这么写:

function(){ 
    function Names(){}       
    Names.HOME = "home";
    return Names;
}();

但是由于JavaScript语法解析的问题,会报SyntaxError错误,因此需要用括号把整个函数定义括起来:

(function () { 
    function Names() {}       
    Names.HOME = "home";
    return Names;
})();
大家讲道理
var Names = (function () { 
    function Names() {}       
    Names.HOME = "home";
    return Names;
})();

立即执行函数大家都知道

里面比较特殊的我感觉是

Names.HOME = "home";

他为函数设置了一个私有的属性,可能这段代码看不出有什么用,但是如果将他写成一个计数器就比较有意义了,如下:

var Names = (function () { 
    function Names() {Names.COUNT++}       
    Names.COUNT = 0;
    return Names;
})();

Names();
console.log(Names.COUNT);    // 1
Names();
console.log(Names.COUNT);    // 2
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号