自执行or立即调用函数
2015-11-16 23:08
183 查看
在这里,我个人比较偏向于用立即调用函数的说法
问题:为什么有的可以执行,有的不能执行呢?
后来看了汤姆大叔的一篇帖子,恍然大悟
函数声明:function foo() {}
函数表达式:var foo = function foo(){}
什么叫表达式?=>由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。(从小学数学课我们就开始讲函数表达式啊!)
函数执行意味着什么?
意味着它得是一个式子才能执行啊!
函数声明是没有办法执行的!
重点在这里:
立即调用函数意味着立即执行的函数,意味着 表达式到执行
所以我们立即调用函数时,将函数用某些方法把它变成表达式!!
那么它能干嘛?匿名函数+闭包!!
问题:为什么有的可以执行,有的不能执行呢?
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执行并返回undefined void function () {}()
那么它能干嘛?匿名函数+闭包!!
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程
- 探索PowerShell(十一)函数介绍