JS 立即执行的函数表达式(function)写法
来源:互联网 发布:淘宝可以用花呗吗 编辑:程序博客网 时间:2024/05/22 15:25
1. 前言
函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。
一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子
<!--by oscar999 2013-1-16--><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Say Hello</title></head><body><script>//define functionfunction sayHello(){alert("hello");}//call functionsayHello();</script></body></html>
但是如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢?
2. 思考的历程
从以上的例子来看,聪明的你结合以上的使用状况可能会想:===》既然调用的时候是在函数名后面加上一对 是否在function 定义的后面加上一对大括号是否就可以执行了呢? 像以下这样:
function sayHello(){alert("hello");}();
不幸的是,以上的写法会报出js 的语法错误。
因为Javascript 的解析器在解析器解析全局的function或者function内部function关键字的时候, 默认会把大括号解析成function声明,而不是function表达式。
也就是说, 会把最后的一对大括号默认解析成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。
===》 你可能又会想, 如果我在大括号中传入参数是否就会解析成表达式了呢?
function sayHello(){alert("hello");}(1);的确, 错误是没有了。 但是以上的写法等同于以下写法的效果
function sayHello(){alert("hello");};(1);这两句完全没有关系, 函数还是不会执行
3. 正确的写法
所以, 只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。
(function sayHello(){alert("hello");}());
还有一种写法也可以, 就是将后面的大括号移出来, as
(function sayHello(){alert("hello");})();
推荐是使用第一种方式。
但是目前很多比较好的js library 使用的都是第二种方式。
比如: web 图形绘制的: git , draw2d ,....
4. 参考
1. http://benalman.com/news/2010/11/immediately-invoked-function-expression/
- JS 立即执行的函数表达式(function)写法
- JS 立即执行的函数表达式(function)写法
- JS 立即执行的函数表达式(function)写法
- JS 立即执行的函数表达式(function)写法
- js 在定义的时候立即执行的函数表达式(function)写法
- js自调函数(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- 转载:js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- 转载一篇ClickOnce的文章!
- Web搜索中的用户意图的自动识别
- github添加fork的别人的仓库
- Linux环境变量的修改(永久,暂时)
- MyEclipse快捷键及经验总结
- JS 立即执行的函数表达式(function)写法
- Hadoop部署中遇到的错误总结
- easyui使用过程中遇到的问题
- MSDN for VC 6.0 MSDN下载地址
- VC6.0编译器参数设置
- leetcode 39: Remove Element
- XCode中创建第一个类 -记录学习过程
- 音频编解码faac
- 门面模式
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
脑血栓前兆怎么办
小腿有血栓怎么办
骨折形成血栓怎么办
腿形成血栓怎么办
大腿形成血栓怎么办
小腿术后血栓怎么办
老年人脑血栓怎么办
大动脉堵塞了怎么办
肺栓塞了怎么办
d二聚体偏高怎么办
家人突发脑血栓怎么办
栓剂过敏了怎么办
过敏了该怎么办
痔疮药塞不进去怎么办
内疮出血怎么办
消防管拆不掉怎么办
潜水泵压力小怎么办
电焊证异地怎么办
洗车营业执照怎么办
初办厂营业执照怎么办
汽修店营业执照怎么办
汽车修理许可证怎么办
雨水井盖打不开怎么办
下水井盖撬不开怎么办
高层水小怎么办
进水暗管漏水怎么办
壁挂炉水压不够怎么办
压缩机高压报警怎么办
电压底怎么办
家庭电压不稳定怎么办
一元火机没气怎么办
挂靠证书被骗怎么办
政府工程款拖欠怎么办
机柜 太重怎么办
机房着火怎么办
大学怎么办退学手续
过敏源变态反应怎么办
高层屋面漏水怎么办
模拟城市 疾病怎么办
花生火灾怎么办
路由器老是断网掉线怎么办