javascript - 立即执行函数和闭包有什么关系

查看:130
本文介绍了javascript - 立即执行函数和闭包有什么关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

匿名闭包

匿名闭包是很常用的代码隔离方式,声明匿名对象并立即执行。匿名函数中声明的变量和方法以及匿名函数本身不会污染到函数体外,同时匿名函数的调用形成一个闭包,使函数体内可以使用函数体外声明的变量和方法。

(function () {
    // ... all vars and functions are in this scope only
    // still maintains access to all globals
}());

今天看了一个文章 原文 http://web.jobbole.com/85883/

这个立即执行函数 和闭包有什么关系呢
是立即执行函数中包含一个全局作用域中的一个函数的引用 所以就形成了闭包么?这么理解对么
还是说文中的解释 是错误的?

解决方案

匿名函数和闭包没有直接关系。能用匿名函数实现闭包的地方,一定也能用命名函数实现。

闭包的本质在于闭和包,即把一些变量封闭起来,使其它程序访问不到,同时把这个封闭的东西打成包甩出来,让大家可以直接用这个包(函数)。最典型的实现之一是对象(或类)的私有成员,如

function MyClass() {
    // 这是一个封闭在 MyClass 中的局部变量
    var _name;
    
    // 这是一个甩出来的包
    this.getName = function() {
        return _name;
    };
    
    // 这是另一个甩出来的包
    this.setName = function(name) {
        // 这保证了 _name 的第一个字母和空格后的第一个字母是大写
        // 而且因为闭包的原因,_name 不可能被 MyCLass() 外的程序访问到
        // 也就保证了上述命名规则的无例外执行
        _name = name.replace(/^.|\s./g, function(s) {
            return s.toUpperCase();
        });
    };
}

var p = new MyClass();
p.setName("james fancy");
console.log(p.getName());   // James Fancy

匿名函数通常只是用于给成员赋值,比如上例中的 getNamesetName;也有可能用于立即执行函数,比如你的那段代码,这会将全局变量局部化,避免全局污染。

闭包常常会和匿名函数一起使用,但他们之间并没有密不可分的关系。

这篇关于javascript - 立即执行函数和闭包有什么关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆