WEB前端 -- jquery中的;(function ( $, window, document, undefined )介绍

WEB前端 – jquery中的;(function ( $, window, document, undefined )介绍

在jquery插件中我们经常看到以下这段代码:

;(function ( $, window,document, undefined ){
 //函数体内具体代码
 })(jQuery, window,document);

解释:

1.分号

代码前面的分号,可以防止多个文件压缩合并比为其他文件的最后一行语句没加分号,而引起合并后的语法错误

2.匿名函数(function(){})();

由于JavaScript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数.避免函数体内和外部的变量冲突.

$实参

是jQuery的简写,这里 接 受 j Q u e r y 对 象 , 也 是 为 了 避 免 接受jQuery对象,也是为了避免 jQuery,变量冲突,保证插件可以正常运行.

window,document实参

分别接受window,document对象,且window,document对象全都是全局环境下的,而在函数体内window,document其实是局部变量,不是全局的window,document对象.

好处:提高性能,减少作用域链的查询时间,若在函数体内需要多次调用window或document对象,这样把window或document对象当做参数传进去,这样做是很必要的.拖插件用不到这2个对象,那就不用传递这两个参数.
undefined形参:

undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined

自执行的匿名函数:

1. 什么是自执行的匿名函数?
它是指形如这样的函数: (function {// code})();

2. 疑问
为什么(function {// code})();可以被执行, 而function {// code}();却会报错?

3. 分析
(1). 首先, 要清楚两者的区别:
(function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特点:
js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.

另外, 函数转换为表达式的方法并不一定要靠分组操作符(),我们还可以用void操作符,~操作符,!操作符……
如:
!function(){
alert(“另类的匿名函数自执行”);
}();

参考文档:http://www.jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0628/290.html
https://www.cnblogs.com/baiJr/p/6135979.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值