第一个问题:
<script>
function(){
alert("ssss");
}
</script>
为什么会提示:Uncaught SyntaxError: Unexpected token (
第二个问题:
<script>
(function(){
alert("ssss");
})
</script>
这为什么不提示错误,但没结果?
第三个问题:
<script>
(function(){
alert("ssss");
})()
</script>
这为什么对?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一个是函数定义语句,需要有函数名称
第二三个是函数表达式(也有称为匿名函数),不需要有函数名称
第二个没效果是因为定义了没执行,所以没有明显的效果。
第三个一般称为立即执行的函数表达式,简称 IIFE,因为执行了,所以有效果。注意有一对小括号里是函数表达式,返回一个函数,对函数进行
()运算就是执行函数,所以这里不光是定义,还执行了。匿名函数应该是这样
你这是函数字面量格式,只能
}"转换为表达式(就是一个表达式)
整体看出来是主要探究
匿名自调用函数问题 1. 没指定函数名(常规函数)
问题 2. 声明一个匿名自调用函数, 同时调用
问题 3. 声明一个匿名自调用函数
ps: 匿名自调用函数主要是为了解决函数域问题, 防止污染全局变量.
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 匿名函数有哪几种执行方式?