在jquery插件中我们经常看到以下这段代码
;(function ( $, window,document, undefined ){
//函数体内具体代码
})(jQuery, window,document);
解释:
1.代码前面的分号,可以防止多个文件压缩合并比为其他文件的最后一行语句没加分号,而引起合并后的语法错误
2.匿名函数(function(){})(); :由于JavaScript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数.避免函数体内和外部的变量冲突.
3.$实参:$是jQuery的简写,这里$接受jQuery对象,也是为了避免$变量冲突,保证插件可以正常运行.
4.window,document实参分别接受window,document对象,而且window,document对象全都是全局环境下的,而在函数体内window,document其实是局部变量,不是全局的window,document对象.好处:提高性能,减少作用域链的查询时间,若在函数体内需要多次调用window或document对象,这样把window或document对象当做参数传进去,这样做是很必要的.拖插件用不到这2个对象,那就不用传递这两个参数.
5.undefined形参:
undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined