js 文件里,匿名函数开头有个 ;! 意义是什么?

     一,在贤心大神的 laydate.js 代码里看到的,开头是 ;!function ( win,undefined ) {}结束还有个 ( window ) 啥意义呢?

     分号是为了合并压缩的时候和其他函数做分割用的;感叹号是用于立即执行函数的,你可以换成加号减号的,和用括号包裹函数体作用一样。

+function (){}
-function (){}
!function (){}
~function (){}
(function (){})()

这种写法可以保证匿名函数立即运行且运行一次

传入的 window 对象从全局变成了局部对象 优点有

1. 运行更快了
2. 可以随意改名 比如 a, 这样便于压缩
3. 可以传入其他库而不导致冲突

举例子
(function ($, w, d, undefined){

$(document).addClass('test');

})(jQuery, window, document);

这样的情况下 JQ 可以无痛使用 也不需要使用 noConflict 方法避免冲突

至于传递 undefined 是因为 ES3 时代这个玩意儿是可以被修改的……真的有人会去做比如 undefined = true 这样的事情 所以说额外定义一个真正的 undefined 可以保证匿名函数内部的 undefined 是真正的 undefined(好累……

二,为什么js文件开头加 ; 或 +呢?

答  :js 文件结束 处是 没有 分号的。若几个 js 连在一起时,2个 js 连接处 会发生语法上的混淆。
开头加 ;  用于分隔, 可以避免多文件 压缩 在一起时 引起的 错误。
分号和分号放在一起也没问题,相当于 “空语句”。
加号。相当于加了一层小括号。例如:
+function(){}();
相当于:
(function() { console.log("Foo!"); })();  
// 或相当于  
(function() { console.log("Foo!"); }());  
如果没有这个加号的话,解析器会认为function是一个函数声明的开始,而后面()将会导致语法错误。在function前面加上+号时,
就变成了一个函数表达式,而函数表达式后面又添加了一个()就变成了一个立即执行的函数了。




  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值