js 立即调用的函数表达式如何写

 如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢,下面为大家介绍下具体的实现步骤,喜欢的朋友可以了解下

如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢,接下来将详细介绍实现步骤,感兴趣的朋友可以了解下 
 
1.前言 
函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。 
一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子 
代码如下: 
代码如下:
<!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 function 
function sayHello() 

alert("hello"); 

//call function 
sayHello(); 
</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.正确的写法 
对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明所以,只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。 
代码如下: 
 代码如下:
(function sayHello() 

alert("hello"); 
}()); 
 
还有一种写法也可以, 就是将后面的大括号移出来, as 
代码如下: 
 代码如下:
(function sayHello() 

alert("hello"); 
})(); 
 
推荐是使用第一种方式。 
但是目前很多比较好的js library 使用的都是第二种方式。 
比如: web 图形绘制的: git , draw2d ,.... 

时间: 2024-12-23 13:57:11

js 立即调用的函数表达式如何写的相关文章

js 立即调用的函数表达式如何写_javascript技巧

如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢,接下来将详细介绍实现步骤,感兴趣的朋友可以了解下 1.前言 函数需要先定义,后使用. 这基本上所有编程语言的一条铁的定律. 一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用. 看一个例子 代码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

深入理解JavaScript系列(4) 立即调用的函数表达式_javascript技巧

前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫法也不一定完全对,主要是看个人如何理解,因为有的人说立即调用,有的人说自动执行,所以你完全可以按照你自己的理解来取一个名字,不过我听很多人都叫它为"自执行",但作者后面说了很多,来说服大家称呼为"立即调用的函数表达式". 本文英文原文地址:http://benalman

JS随机调用指定函数的方法

  本文实例讲述了JS随机调用指定函数的方法.分享给大家供大家参考.具体如下: 本代码通过随机定时器调用指定函数,可达到间隔随机时间之行指定的函数的目的 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 function randRange(data) { var newTime = data[Math.floor(data.length * Math.random())]; return newTime; } function toggleSomething() { var ti

c++-我想创建可以在任何一个OnClick事件中调用的函数,怎么写?

问题描述 我想创建可以在任何一个OnClick事件中调用的函数,怎么写? 现在有一个单文档MFC程序,我想创建一个全局的函数或者类,可以在任何一个OnClick事件中调用,请问应该怎么写? 我是这样做的,定义了一个类A,然后A中的函数比如void b()是public的,在其他onclick事件中创建一个A的对象a,a.b();编译没问题,可是一连接就报错,为什么?我应该怎么写? 解决方案 如果单纯的想将OnClick中的功能分离成一个函数的话,你可以在OnClick这个函数所在的类比如说,CE

JS随机调用指定函数的方法_javascript技巧

本文实例讲述了JS随机调用指定函数的方法.分享给大家供大家参考.具体如下: 本代码通过随机定时器调用指定函数,可达到间隔随机时间之行指定的函数的目的 function randRange(data) { var newTime = data[Math.floor(data.length * Math.random())]; return newTime; } function toggleSomething() { var timeArray = new Array(200, 300, 150,

VS2008中JS怎么调用CS函数 不知道AJAX的使用和以前一样吗?谢谢

问题描述 RT 解决方案 解决方案二:f解决方案三:和05中的区别应该不大吧解决方案四:最好的办法就是在vs08中试一下解决方案五:Ajax,一样的解决方案六:用<%=result%>这种方式!result为函数返回值解决方案七:一样解决方案八:用着不习惯谢谢大家能不能再具体点

浅谈javascript 函数表达式和函数声明的区别_javascript技巧

javascript中声明函数的方法有两种:函数声明式和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用. 3).以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者try/catch/finally中,而     函数表达式可以在任何地方声明. 下面分别用两种方法定

JS访问SWF的函数用法实例

  本文实例讲述了JS访问SWF的函数用法.分享给大家供大家参考.具体分析如下: 关于Flash和JS相互调用的例子已经说很多了,这不是难题,当然,调用错误这也不是Flash和JS的错误,我们今天就来彻底解决IE,FF和Chrome之间的不兼容问题! 我们知道,Flash中,如果访问外部JS函数,只需 代码如下: flash.external.ExternalInterface.call("JS中的函数名"); 这一句即可 如果要JS访问Flash中的函数,需要用addCallBack

浅析javascript中函数声明和函数表达式的区别

这篇文章主要介绍了浅析javascript中函数声明和函数表达式的区别,需要的朋友可以参考下     javascript中声明函数的方法有两种:函数声明式和函数表达式. 区别如下: 1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的. 2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用. 3).以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者