(function(){
var test = 'Hello world';
})();
上面函数有什么作用,什么时候该这样做?谢谢!上面函数是闭包吗?
1、在js中,()本身是有执行一段表达式(对象、函数)的功能的,返回表达式或者表达式结果。譬如 (1)、(function(){return 1;})、(1+2)。
2、function(){} 这叫做匿名函数。
所以
(function(){
var test = 'Hello world';
}) 会返回一个function,因为js一切皆对象,我们不妨
var a = (function(){
var test = 'Hello world';
}); , a这是一个函数
a(),也就是
(function(){
var test = 'Hello world';
})(); 是函数调用,会执行 var test = 'Hello world';
3、理解闭包,要先理解作用域、理解函数定义。函数定义时,会创建一个context的东西,把函数用到的,包括并不是函数内定义的变量,绑定到自身,这样就创建了一个闭包。单纯说某个函数是不是闭包,没有什么意义,因为闭包是语言层面的东西,应该说js函数支持闭包。
用a123456678的例子:
(function() {
var test = 'Hello world'; // 定义,外层函数作用域,有自己的context
return (function() {
return test; // 引用,内层函数作用域,有自己的context
});
})()();
(function() {
var test = 'Hello world';
return (function() {
return test;
});
})()();
test作用域出了上面的函数就消亡了,所以约束了,也有类似“名字空间”的约束。
有闭包的话,生命周期就延长到了构成闭包的函数的生命周期。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。