We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
让一个函数页面加载后就运行(专业术语叫:IIFE),你的脑海中能想出几种办法呢?
本文就总结下一些常用的办法,同时一些不常用的,但是在一些牛人写的框架的源码中经常会出现的函数自执行的方法。
function autoFun(){}; autoFun();
function autoFun(){}; window.onload = function(){ autoFun(); };
<script> function autoFun(){}; </script> <body onload="autoFun()"> </body>
function autoFun(){}; $(function(){ autoFun(); });
jquery 插件就是这么用的。
(function(){})();
+function autoFun(){}();
bootstrap 组件就是这么用的。
!function autoFun(){}();
以上两种方法,都是在function前面,增加了操作符,于是函数就自动运行了,原理是什么呢?
答案是:通过操作符,将函数申明变为函数表达式,然后再执行。
2017年3月29日21:05:26 修正和补充以下内容。
比如:!function autoFun(){}(); 可以这么理解:
之所以这么连起来,最主要的问题是以下这种写法是错误的:
function autoFun(){}();
因为受JS语法解析器的影响,函数的定义和执行不能同时进行的。
但是!如果是一个表达式,那么JS语法解析器会走另外的处理流程,这个流程就是上面提到的2步。
当然,只要是表达式就可以,所以函数的定义不行,但是函数的申明就是可以的:
var autoFun = function(){}();
这么写的结果就是function会执行,但是autoFun=undefined;原因是这时候autoFun的值等于function执行的结果,由于function是个空方法里面没有return值,所以结果就是未定义。 当然,你这么写的目的,可能只是为了快速执行function,所以最后的autoFun的结果你并不关心,那就无所谓了。
具体哪些操作符,可以达到这个目的,参考:IIFE
另外,如果不知道 函数申明 和 函数表达式 的,请自行Google去吧!
函数申明
函数表达式
The text was updated successfully, but these errors were encountered:
sunmaobin
No branches or pull requests
让一个函数页面加载后就运行(专业术语叫:IIFE),你的脑海中能想出几种办法呢?
本文就总结下一些常用的办法,同时一些不常用的,但是在一些牛人写的框架的源码中经常会出现的函数自执行的方法。
一、几种常见的方法
1、在body中直接执行方法
2、在head中window.onload 函数中执行函数
3、使用body的onload事件执行
4、借助jquery的启动函数执行
5、使用匿名函数执行
jquery 插件就是这么用的。
二、两种不常见的用法
1、+function
2、!function
bootstrap 组件就是这么用的。
以上两种方法,都是在function前面,增加了操作符,于是函数就自动运行了,原理是什么呢?
答案是:通过操作符,将函数申明变为函数表达式,然后再执行。
比如:
!function autoFun(){}();
可以这么理解:之所以这么连起来,最主要的问题是以下这种写法是错误的:
因为受JS语法解析器的影响,函数的定义和执行不能同时进行的。
但是!如果是一个表达式,那么JS语法解析器会走另外的处理流程,这个流程就是上面提到的2步。
当然,只要是表达式就可以,所以函数的定义不行,但是函数的申明就是可以的:
这么写的结果就是function会执行,但是autoFun=undefined;原因是这时候autoFun的值等于function执行的结果,由于function是个空方法里面没有return值,所以结果就是未定义。
当然,你这么写的目的,可能只是为了快速执行function,所以最后的autoFun的结果你并不关心,那就无所谓了。
具体哪些操作符,可以达到这个目的,参考:IIFE
另外,如果不知道
函数申明
和函数表达式
的,请自行Google去吧!参考
The text was updated successfully, but these errors were encountered: