js自执行函数的几种不同写法的比较

经常需要一个函数自执行,可惜这一种写法是错的:


代码如下:

function(){alert(1);}();

原因是前半段“function(){alert(1);}”被当成了函数声明,而不是一个函数表达式,从而让后面的“();”变得孤立,产生语法错。

按上面的分析,这一段代码虽说没有语法错,但也是不符合我们的预期的,因为这个函数并没有自执行。


代码如下:

function(){alert(1);}(1);

综上,症结在于,如何明确代码描述的是一个函数表达式,而不是函数声明语句。
正确的写法多种多样,也各有利弊:

方法1:最前最后加括号

代码如下:

(function(){alert(1);}());

这是jslint推荐的写法,好处是,能提醒阅读代码的人,这段代码是一个整体。
例如,在有语法高亮匹配功能的编辑器里,光标在第一个左括号后时,最后一个右括号也会高亮,看代码的人一眼就可以看到这个整体。
不过,对于某些写代码不喜欢在行后加分号的同学,也会形成一些坑坑,例如以下代码会报运行错:


代码如下:

var a=1
(function(){alert(1);}());

方法2:function外面加括号

代码如下:

(function(){alert(1);})();

这种做法比方法1少了一个代码整体性的好处。

方法3:function前面加运算符,常见的是!与void 。


代码如下:

!function(){alert(1);}();
void function(){alert(2);}();

显然,加上“!”或“+”等运算符,写起来是最简单的。
加上“void ”要敲五下键盘,但是听说有一个好处是,比加"!"少一次逻辑运算。----我只是听说,不明所以。

最后,代表我个人,强烈支持方法1,即jslint的推荐写法:


代码如下:

(function(){alert(1);}());

(0)

相关推荐

  • javascript自执行函数

    function (window, $, undefined) { play=function(){ $("#demo").val("This is a demo."); } window.wbLogin = play; })(window, jQuery); 像上边这样的代码为什么要把window, jQuery对象传进去? 为什么要传入 jQuery? 通过定义一个匿名函数,创建了一个"私有"的命名空间,该命名空间的变量和方法,不会破坏全局的

  • javascript自执行函数之伪命名空间封装法

    自执行函数:自动执行的函数.它在被解释时就已经在运行了.一般函数都是在被调用时才会执行的. 自执行函数的一般格式:(function() { 函数体 })(); 而且,自执行函数中一般都会有一个function() {}形式的匿名函数. 下面的代码在window对象中创建一个命名空间 mySpace,并把自执行函数中的方法封装在mySpace命名空间之下,以便于我们调用这个自执行函数中的一些功能. 复制代码 代码如下: (function() { //根据id获取对象 function $(id

  • javascript中运用闭包和自执行函数解决大量的全局变量问题

    但是从全局看来,这样会导致出现一些让我们难以掌控的情况的出现:变量同名.多个函数共用一个全局变量后的值的变换--等等.所以,有时候,对于一些简单的全局变量,我们可以通过另一种方式来处理--用自执行函数+闭包的方法来解: 比如:我们要在网页加载时给出一个提示,在网页关闭时给出另一个提示 下面的代码,实现了以上功能 复制代码 代码如下: var msg1 = "欢迎光临!"; // 定义一个全局变量 var msg2 = "再见!" //定了另一个全局变量 window

  • 浅析Javascript匿名函数与自执行函数

    函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 函数的定义,大致可分为三种方式: 第一种:这也是最常规的一种 function double(x){ return 2 * x; } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用. var double = new Function('x', 'return 2 * x;'); 第三种: var double = function(

  • js自执行函数的几种不同写法的比较

    经常需要一个函数自执行,可惜这一种写法是错的: 复制代码 代码如下: function(){alert(1);}(); 原因是前半段"function(){alert(1);}"被当成了函数声明,而不是一个函数表达式,从而让后面的"();"变得孤立,产生语法错. 按上面的分析,这一段代码虽说没有语法错,但也是不符合我们的预期的,因为这个函数并没有自执行. 复制代码 代码如下: function(){alert(1);}(1); 综上,症结在于,如何明确代码描述的是一

  • JavaScript立即执行函数的三种不同写法

    第一种: (function () { // open IIFE // inside IIFE }()); // close IIFE 第二种: !function () { // open IIFE // inside IIFE }(); // close IIFE 第三种: void function () { // open IIFE // inside IIFE }(); // close IIFE

  • JS立即执行函数功能与用法分析

    本文实例讲述了JS立即执行函数功能与用法.分享给大家供大家参考,具体如下: 相信大家经常会遇到下面这两种写法: (function(){ ... })() 和 (function(){ ... }()) 关于这样写是什么意思呢?有什么区别呢? 在此之前,我们需要了解几个概念: 函数声明.函数表达式.匿名函数 函数声明: function fnName() {...} ; 使用 function 关键字声明一个函数,再执行一个函数名,叫函数声明. 函数表达式: var fnName = funct

  • JS 自执行函数原理及用法

    js自执行函数,听到这个名字,首先会联想到函数.接下来,我来定义一个函数: function aaa(a,b){ return sum = a + b } 定义了一个名为aaa的函数,在里面可以计算两个数的和.如果想执行它,就必须得调用它,并且还得给它传参: var aa = aaa(1,2) 这样就实现了一个函数的定义与调用,通过console.log我们可以看到sum实现了两个数的相加. 自执行函数是什么?自执行函数就是当它被定义出来,就会自动执行的函数.不需要调用,传参也很方便.就上面的函

  • js function定义函数的几种不错方法

    js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码 代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 复制代码代码如下: 复制代码 代码如下: function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 复制代码代码如下: 复制代码 代码如下: (function(){ //

  • python 执行函数的九种方法

    方法一:直接调用函数运行 这种是最简单且直观的方法 def task():     print("running task") task() 如果是在类中,也是如此 class Task:     def task(self):         print("running task") Task().task() 方法二:使用偏函数来执行 在 functools 这个内置库中,有一个 partial 方法专门用来生成偏函数. def power(x, n):   

  • JS中创建函数的三种方式及区别

    1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ return n1+n2; }; 两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问:而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行. 自执行函数严格来说也叫函数表达式,它主要用于创建一个新的作用域,在此作用域内声明的变量,不会和其它作用域内的变量冲突或混淆,大多是以匿名函数方式存在,

  • js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?

    没有区别. 你需要明白 IIFE 的原理,我简单说一下: 复制代码 代码如下: function foo() {...}     // 这是定义,Declaration:定义只是让解释器知道其存在,但是不会运行. foo();                   // 这是语句,Statement:解释器遇到语句是会运行它的. IIFE 并非必须,传统一点可以这么写: 复制代码 代码如下: function foo() {...} foo(); 那么为什么要 IIFE? 1.传统的方法啰嗦,定义

  • js中匿名函数的N种写法

    匿名函数没有实际名字,也没有指针,怎么执行滴? 其实大家可以看看小括号的意义就应该可以理解.小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了把- 关于匿名函数写法,很发散~ 最常见的用法: 复制代码 代码如下: (function() { alert('water'); })(); 当然也可以带参数: 复制代码 代码如下: (function(o) { alert

  • JS匿名函数和匿名自执行函数概念与用法分析

    本文实例讲述了JS匿名函数和匿名自执行函数概念与用法.分享给大家供大家参考,具体如下: 1. 匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type="button" value="点击" id="btn"> <script type="text/javascript"> //匿名函数的第一种情形 var btn=document.querySelector

随机推荐