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

 更新时间:2014年01月12日 17:39:14   作者:  
如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢,下面为大家介绍下具体的实现步骤,喜欢的朋友可以了解下
如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢,接下来将详细介绍实现步骤,感兴趣的朋友可以了解下

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 ,....

相关文章

  • ie6下png图片背景不透明的解决办法使用js实现

    ie6下png图片背景不透明的解决办法使用js实现

    我们时常在使用png图片的时候,在ie6下发生背景不透明的问题,解决的方法实在是太多了,下面给大家介绍下一个js解决的方式,感兴趣的朋友可以了解下的
    2013-01-01
  • js判断文件格式及大小的简单实例(必看)

    js判断文件格式及大小的简单实例(必看)

    下面小编就为大家带来一篇js判断文件格式及大小的简单实例(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 微信小程序如何访问公众号文章

    微信小程序如何访问公众号文章

    这篇文章主要介绍了微信小程序如何访问公众号文章,随着小程序不断的发展,现在个人的小程序也开放了很多功能了,个人小程序直接打开公众号链接。在群里看到的一款小程序,点击可以直接阅读文章了,需要的朋友可以参考下
    2019-07-07
  • 使用JavaScript实现一个静态链表

    使用JavaScript实现一个静态链表

    这篇文章主要为大家详细介绍了如何使用JavaScript实现一个静态链表,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06
  • JavaScript如何输出杨辉三角

    JavaScript如何输出杨辉三角

    这篇文章主要介绍了JavaScript如何输出杨辉三角问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • JavaScript解决Joseph问题

    JavaScript解决Joseph问题

    JavaScript解决Joseph问题...
    2007-02-02
  • Javascript优化技巧之短路表达式详细介绍

    Javascript优化技巧之短路表达式详细介绍

    这篇文章主要介绍了Javascript优化技巧之短路表达式详细介绍,本文讲解了什么是短路表达式,并给出了一些示例,需要的朋友可以参考下
    2015-03-03
  • JavaScript获取文本框内选中文本的方法

    JavaScript获取文本框内选中文本的方法

    这篇文章主要介绍了JavaScript获取文本框内选中文本的方法,实例分析了javascript通过onclick获取文本框选中文本的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 详解json串反转义(消除反斜杠)

    详解json串反转义(消除反斜杠)

    这篇文章主要介绍了详解json串反转义(消除反斜杠),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 深入理解 JavaScript 中的 JSON

    深入理解 JavaScript 中的 JSON

    我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify后的字符串是怎样的
    2017-04-04

最新评论