js 文件里,匿名函数开头有个 ;! 意义是什么?
发布日期:2021-09-29 01:25:42
浏览次数:8
分类:技术文章
本文共 976 字,大约阅读时间需要 3 分钟。
一,在贤心大神的 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前面加上+号时,就变成了一个函数表达式,而函数表达式后面又添加了一个()就变成了一个立即执行的函数了。
转载地址:https://blog.csdn.net/happydecai/article/details/79289223 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月09日 03时00分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php tracy,admin.php
2019-04-21
php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性
2019-04-21
oracle比较强大的函数,SQL和ORACLE函数比较
2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理
2019-04-21
php红包平均分配,红包平均分配算法
2019-04-21
linux磁盘的命令是,linux磁盘相关的命令
2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存
2019-04-21
linux英文包安装教程视频,Linux源码包安装过程讲解
2019-04-21
linux 关闭rsync服务器,linux下配置rsync服务器和实时同步
2019-04-21
linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
2019-04-21
linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版)
2019-04-21