自执行or立即调用函数
来源:互联网 发布:云计算服务的应用例子 编辑:程序博客网 时间:2024/05/19 16:22
在这里,我个人比较偏向于用立即调用函数的说法
问题:为什么有的可以执行,有的不能执行呢?
function(){console.log("执行啦")}()//Uncaught SyntaxError: Unexpected token (function foo(){console.log("执行啦")}()//Uncaught SyntaxError: Unexpected token (var foo = function foo(){console.log("执行啦")}()//执行啦function foo(){console.log("执行啦")}(1);//不会报错,但不执行相当于:function foo(){console.log("执行啦")} (1) //其实并没有做什么
后来看了汤姆大叔的一篇帖子,恍然大悟
函数声明:function foo() {}
函数表达式:var foo = function foo(){}
什么叫表达式?=>由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。(从小学数学课我们就开始讲函数表达式啊!)
函数执行意味着什么?
意味着它得是一个式子才能执行啊!
函数声明是没有办法执行的!
重点在这里:
立即调用函数意味着立即执行的函数,意味着 表达式到执行
所以我们立即调用函数时,将函数用某些方法把它变成表达式!!
各种操作符是在函数表达式和函数声明上消除歧义,所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了(function () { /* code */ } ()); // 推荐使用这个(function () { /* code */ })(); // 但是这个也是可以用的var i = function () { return 10; } ();//表达式true && function () { /* code */ } ();//用&&转换为表达式0, function () { /* code */ } ();//用,转换为表达式// 你甚至可以在function前面加一元操作符号转换为表达式!function () { /* code */ } ();~function () { /* code */ } ();-function () { /* code */ } ();+function () { /* code */ } ();// 还有一个情况,使用new关键字,也可以用,但我不确定它的效率new function () { /* code */ }new function () { /* code */ } () // 如果需要传递参数,只需要加上括弧()//当然,这个也是可以的,void执行并返回undefinedvoid function () {}()
那么它能干嘛?匿名函数+闭包!!
0 0
- 自执行or立即调用函数
- javascript中的自执行(立即执行)函数(function(){…})()
- 立即自执行函数和分组操作符
- 自动执行函数/立即调用的函数表达式
- JavaScript立即执行函数
- js立即执行函数
- JS-立即执行函数
- JS立即执行函数
- js立即执行函数
- Javascript立即执行函数
- js 立即执行函数
- javaScript立即执行函数
- js立即执行函数
- 立即执行函数
- js立即执行函数
- js立即执行函数
- 立即执行函数
- 立即执行函数IIFE
- cocos2d-js跑酷游戏实战笔记1
- oracle client 删除后 oci.dll 删不掉
- 深入理解final
- Linux 文件系统剖析
- 基于http的QQ协议代码
- 自执行or立即调用函数
- 解决 IllegalStateException: Can not perform this action after onSaveInstanceState
- Android 从strings.xml文件中随机获取单个数组值
- 南大软院大神养成计划——第一天,学习开发工具
- 冒泡排序
- ARM主站-CANopenIO模块设计过程
- 关于二叉树宽度的算法包括递归和非递归
- 2012-2013 Waterloo Local Contest, 13 October, 2012 A题(最短路变形)
- django小记