下面两个例子有什么区别?
setInterval(myFunc, 100);
function myFunc() { alert('asdf'); }
setInterval(myFunc, 100);
var myFunc = function myFunc() { alert('asdf'); }
最佳答案
根据 ECMA 标准,第一个示例是函数语句,而第二个示例是函数表达式。根据 Javascript,函数语句算作一个定义,这意味着在第一个示例中它在整个函数中都是可见的(如果它不在函数中,则为脚本)。但在第二个例子中,var myFunc 直到第二行才会有 function myFunc 的值,因此 setInterval 将被传递 undefined
。
函数语句和表达式之间唯一的语法区别是语句不包含在更大的表达式中:例如:(function foo() {})
是一个表达式,而 function foo (){}
是一个语句。
注意:我相信旧的 IE(9 之前?)将所有函数表达式都视为定义。
为了阐述这个答案,请考虑以下代码:
<script language="javascript">
alert(A);
alert(B);
function A() {return "A value";}
var B = function B(){ return "B value";}
alert(A);
alert(B);
</script>
这将提醒(按顺序):
- 函数 A()...
- 未定义
- 函数 A()...
- 函数 B()...
关于javascript - Javascript函数声明之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448567/