我出的面試題中,有一條是問如何避免頁面引用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(); }); }