JavaScript 中定义函数有两种常用的方式:使用函数表达式(function expression)和函数声明(function declaration)。在使用函数表达式时,可以使用 var 声明一个变量并赋值为函数,也可以使用 function 关键字直接定义函数。那么 var foo = function () {} 和 function foo() 的区别在哪里呢?
1. var foo = function () {}
这种方式是使用函数表达式定义函数,它的基本语法是:var 变量名 = function () {函数体}
。这种方式定义的函数为匿名函数,也就是没有名字的函数,为一个函数表达式。可以使用变量名来调用这个函数。
示例代码:
var logMsg = function (msg) {
console.log(msg);
};
logMsg("Hello World");
该代码定义了一个名为 logMsg
的变量,它的值为一个函数表达式。当调用 logMsg
函数时,会输出 Hello World
。
2. function foo()
这种方式是使用函数声明定义函数,它的基本语法是:function 函数名() {函数体}
。这种方式定义的函数为具名函数,也就是有名字的函数,为一个函数声明。函数名可以直接使用来调用这个函数。
示例代码:
function logMsg(msg) {
console.log(msg);
}
logMsg("Hello World");
该代码定义了一个名为 logMsg
的函数,它为一个函数声明。当调用 logMsg
函数时,会输出 Hello World
。
区别介绍
在使用 var 声明一个变量并赋值为函数表达式时,函数的名称并不会被定义为变量的名称,而是被归入作用域链中。也就是说,函数的作用域仅在声明它的函数和其他内层函数中可见。在这种情况下,函数的名称是可选的。如果不给函数指定一个名称,那么它就是一个匿名函数。使用变量名来调用函数,而函数名只是一个指向该函数的指针。
而在使用 function 关键字定义函数时,函数名会直接被定义为变量的名称,而不是变量名作为一个变量来指向函数。因此,函数名在定义所在的作用域之外也能被调用。
此外,使用 function 关键字定义的函数可以在函数声明之前进行调用,而使用 var 定义的函数表达式则不行。
示例代码:
// 1. 使用函数表达式
var logMsg = function (msg) {
console.log(msg);
};
logMsg("Hello World"); // 输出:Hello World
// 2. 使用函数声明
logInfo("Hello World"); // 输出:Hello World
function logInfo(msg) {
console.log(msg);
}
在这个例子中,首先使用函数表达式定义了一个名为 logMsg
变量的函数。然后使用函数声明定义了一个名为 logInfo
的函数。最后,在两个函数定义后都可以通过函数名调用这两个函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍 - Python技术站