还能怎么写?第一次看见这样
例子1
var s=(function(){
var a;
操作
return a;
})();
我晕了。。。然后
例子2
var s=(function(){
var a;
操作
return function(){
};
})();
我继续晕。。。一个简单函数的声明变这样了。
为什么?为什么?为什么要把简单的事情变的这么复杂。错了,其实是把复杂的问题简单化。
在我们常见的javascript代码中很随意的声明函数和变量以及外联js文件。很容易造成命名冲突互相覆盖等问题,虽然我们可以通过命名规则避 免这种情况的产生。有没没比命名规则更好的解决办法,我们都知道java通过包名称和类名称以及private来解决这些问题,并且隐藏实现,仅仅暴露必 须的暴露的api接口。
- 1. 现在来理解第一段代码:
var s=(function(){
var a;
操作
return a;
})();
对于一段复杂的求值过程,我们可能声明数个变量,而这些变量又暴露在全局的空间。如果通过上述的方式,所有声明的的变量都在function里面运 算,对于全局是不可见的,我们仅仅暴露一个变量s。
- 2. 第二段代码
var s=(function(){
var a=0;
return function(){
a++;
alert(“这函数被调用了”+a+”次”);
var b;
};
})();
我们声明了一个函数s,s可能被多次执行,刚好我们的s需要一个类似于java 中的private static变量而javascript没有?怎么办。我可以在函数外面声明一个全局变量,但是这样又占用了一个名称资源,以及可能产生的冲突,因此便有 上述代码。
变量a对应函数外部不可见,却又是静态的,刚好相当private static。
下期预告来个简单jquery这种实现。