javascript - Javascript函数声明之间的区别

标签 javascript

下面两个例子有什么区别?

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>

这将提醒(按顺序):

  1. 函数 A()...
  2. 未定义
  3. 函数 A()...
  4. 函数 B()...

关于javascript - Javascript函数声明之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448567/

相关文章:

javascript - 使用 jQuery 选择不在类名中的第一个 div

javascript - 我的 javascript 内存可以更简洁吗?

javascript - Gmail 是如何创建这个自定义提示对话框的?

javascript - jquery自动计算字段并将它们加在一起

javascript - 动态创建的 <video> 元素 - 自动播放不起作用

javascript - QUnit 忽略源错误

javascript - 使用 Nodejs 的多个用户输入

javascript - 单个函数调用 chrome.runtime.sendMessage() 中的多条消息;

javascript - TypeScript:在构造函数内部和外部声明变量有什么区别?

javascript - 覆盖 css 不起作用