javascript - js匿名函数的一个问题
高洛峰
高洛峰 2017-04-11 09:54:07
[JavaScript讨论组]

第一个问题:

        <script>
            function(){
                alert("ssss");
            }
        </script>

为什么会提示:Uncaught SyntaxError: Unexpected token (

第二个问题:

        <script>
            (function(){
                alert("ssss");
            })
        </script>

这为什么不提示错误,但没结果?

第三个问题:

<script>
            (function(){
                alert("ssss");
            })()
        </script>

这为什么对?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(9)
阿神

第一个是函数定义语句,需要有函数名称

function fName() {}

噫,发现第二个是执行了的,第三个不是……你改了题目吗?那我改答案……
又改……那我再改……

第二三个是函数表达式(也有称为匿名函数),不需要有函数名称

第二个没效果是因为定义了没执行,所以没有明显的效果。

第三个一般称为立即执行的函数表达式,简称 IIFE,因为执行了,所以有效果。注意有一对小括号里是函数表达式,返回一个函数,对函数进行 () 运算就是执行函数,所以这里不光是定义,还执行了。

怪我咯

匿名函数应该是这样

(function(){
       alert("ssss");
  })()

你这是函数字面量格式,只能

function aaa(){//函数声明+函数名+参数+函数体,否则就报错,语法错误

     alert("ssss");
}
  第二个和第三个的区别:
  第二个是匿名函数+调用(“()”),第三个是由“()”将表达式"function(){
   alert("ssss");

}"转换为表达式(就是一个表达式)

伊谢尔伦
var foo = function(){
   alert("ssss");
}
foo();
怪我咯

整体看出来是主要探究匿名自调用函数

问题 1. 没指定函数名(常规函数)
问题 2. 声明一个匿名自调用函数, 同时调用
问题 3. 声明一个匿名自调用函数

ps: 匿名自调用函数主要是为了解决函数域问题, 防止污染全局变量.

巴扎黑
(function (){alert("ssss");})
怪我咯

https://www.zhihu.com/questio...

黄舟

匿名函数的调用是在函数末尾加上();你没有调用函数怎么会执行,就没结果咯。先去看看函数的3种声明方式及调用吧

大家讲道理

问题1:

语法错误。为什么会导致语法错误?试想你这样定义完如何调用这个方法?

问题2:

加完圆括号后,将声明语句变成了表达式语句,所以避免了触发语法错误。没有执行?因为这个表达式内部还是一个声明,并没有调用。

问题3:

参照问题2,后面的()立即执行了这个方法,所以成功了

就是这样

大家讲道理
  • 问题1:函数表达式定义函数写法应该是var s = function(){ alert("ssss"); },但其实这个可以这么写var s = new function(){ alert("ssss"); }(不推荐这样写)。我发现一个问题要是在浏览器中写成这样new function(){ alert("ssss"); }也是可以的,不会报错,会立即执行。如果为函数声明则应该写成function fName(){ alert("ssss"); }。对于第一个问题是函数声明,函数声明必须要有标识符做为函数名称,所以会报错。


  • 问题2:括号(),一种用法是作为分组运算符对表达式求值,举个例子1 * ( 2 + 3 )这里的括号就是将表达式分组进行运算。问题2中用括号将代码function(){ alert("ssss"); }括住,只是对这个表达式求值,求值结果是function(){ alert("ssss"); },函数并没有执行。


  • 问题3:问题3在问题2的基础上,在最后又加了一个括号,这就是括号的另一种使用,用来执行函数。前一个括号的运算结果是:function(){ alert("ssss"); }一个函数,则执行这个函数,就会弹出ssss结果。


可以看一看知乎上的一个回答JavaScript 匿名函数有哪几种执行方式?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号