Javascript 这两种调用函数的方法之间的区别

Javascript 这两种调用函数的方法之间的区别,javascript,Javascript,这是一个赋值语句,因此只有在执行该语句之后,FirstNameFunction才会被赋值。所以当PopupFirstNameButton.addEventListener('click',firstname函数)时; 正在执行,FirstNameFunction是未定义的第一个函数在编译时被绑定。function foo()语法允许对函数进行前瞻性声明 第二个是简单的变量声明。在声明变量之前,您不能使用变量…您再次缺少第三个参数 这是因为第1行中使用的FirstNameFunction尚未定义,

这是一个赋值语句,因此只有在执行该语句之后,
FirstNameFunction
才会被赋值。所以当
PopupFirstNameButton.addEventListener('click',firstname函数)时;

正在执行,
FirstNameFunction
未定义的

第一个函数在编译时被绑定。
function foo()
语法允许对函数进行前瞻性声明


第二个是简单的变量声明。在声明变量之前,您不能使用变量…

您再次缺少第三个参数

这是因为第1行中使用的
FirstNameFunction
尚未定义,第9行使用了匿名函数语法。
使用
函数
语法
firstname函数
符号已在范围内。

可能是因为它们的名称相同? 我试过:

var FirstNameFunction = function (){
    alert("Hello");   
}

//这不叫吗?
var FirstNameFunction=函数(){
警惕(“你好”);
}
getById('abutton')。addEventListener('click',firstname函数);

在第一个示例中,您正在创建一个命名函数。函数名为FirstNameFunction

在第二个示例中,您正在创建一个匿名函数(一个没有名称的函数)。但是,您还定义了一个名为FirstNameFunction的变量,该变量包含对匿名函数的引用。在本例中,FirstNameFunction不是函数本身,而是引用它的变量

当您在第一行中分配事件处理程序时,这些差异之所以重要,是因为全局作用域命名函数可以从代码中的任何位置引用,只要在您尝试使用它们之前对它们的声明进行了解析和解释。另一方面,变量只能在范围内使用。这意味着在定义它们之后,在它们超出范围之前。因此,只要在调用事件处理程序之前声明指向匿名函数的变量并在同一范围内执行,就应该能够在事件处理程序赋值中使用第二个声明方法

这项工作:

<HEAD>
        <SCRIPT TYPE="text/JavaScript">
            // This does not get called?
            var FirstNameFunction = function (){
                alert("Hello");
            }
        </SCRIPT>
    </HEAD>
    <BODY>
        <button id="abutton" value="!"/>

        <SCRIPT TYPE="text/JavaScript">
            getById('abutton').addEventListener('click', FirstNameFunction);
            </SCRIPT>
    </BODY>
这并不是:

var FirstNameFunction = function (){
    alert("Hello");   
}    
PopupFirstNameButton.addEventListener('click', FirstNameFunction, false);
这也不是:

PopupFirstNameButton.addEventListener('click', FirstNameFunction, false); // FirstNameFunction is undefined!!
var FirstNameFunction = function (){
    alert("Hello");   
}    

更准确地说,它是一个“函数表达式”(与“函数声明”和Mozilla的非标准“函数语句”相对)。请参阅@theJava See以了解函数定义的两种方法之间的差异。这是因为您在声明变量后调用addEventListener函数,而asker之前调用它。+1,因为我没有意识到addEventListener的第三个参数是必需的(我认为它将默认为false)。但是O'Reilly同意你的观点:@Joshua Carmoty,添加了权威来源的链接(不喜欢DevMo?底部也有W3C链接!)好吧,解释时间。然而,有时会涉及机器代码,因此该术语并非完全错误。
PopupFirstNameButton.addEventListener('click', FirstNameFunction, false); // FirstNameFunction is undefined!!
var FirstNameFunction = function (){
    alert("Hello");   
}    
function declareFunction()
{
    var FirstNameFunction = function (){
        alert("Hello");   
    }    
}  // FirstNameFunction falls out of scope here and is no longer declared

declareFunction(); // The anonymous function exists while this is running but the reference is lost when the function returns

PopupFirstNameButton.addEventListener('click', FirstNameFunction, false); // This doesn't work.