我出的面试题中,有一条是问如何避免页面引用JS,出现函数、变量重复、冲突的。javascript
从大的方面讲,应该引入javascript的模块化开发,符合AMD规范之类;html
从小的方面说,大概就是限定变量和函数的做用域了,这也涉及到一点你们如雷贯耳的闭包概念。java
众所周知,javascript没有类,只有函数。其实它的函数也跟类差很少了,函数里面能够定义函数。而对于.net来讲,直到近期出现的C#7,才支持这一点。面试
因此,咱们能够将函数和变量,都定义在一个函数里面,这样即与外部隔绝矣:markdown
<html>
<head></head> <body></body> </html> <script> (function (){ function f1(){}; var v1; .... })(); </script>
在一个页面中这样书写,等价于:闭包
<html>
<head></head>
<body></body>
</html>
<script> function f1(){}; var v1; .... </script>
但封装性就行了许多,避免出现后者这种平铺直白,将方法和变量彻底暴露于外界的隐患。而且(function(){})();
这种方式能够应用到子函数,乃至推广到全部的函数,层层封装,没有止境。而且有闭包属性,没必要担忧全局的绑定访问不到里层的函数:模块化
(function(){ function f1(){} function f2(){} $("#btn1").click(function(){ f1(); f2(); }); }