我正在编写一段 JavaScript 代码,其中函数有三种不同的定义方式。
funtion f1(){}
和第二
var vaiable = f1(){}
和第三个
window.f1 = function(){}
我已经了解前两个这里,但不知道最后一个是什么。
如果我把第三个改成第二个,会有问题吗?
第三种类型的优缺点是什么?
为什么会特别使用它?
我正在编写一段 JavaScript 代码,其中函数有三种不同的定义方式。
funtion f1(){}
和第二
var vaiable = f1(){}
和第三个
window.f1 = function(){}
我已经了解前两个这里,但不知道最后一个是什么。
如果我把第三个改成第二个,会有问题吗?
第三种类型的优缺点是什么?
为什么会特别使用它?
// this is function declaration in JavaScript
// @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function
function myFunction (/* args */) { /* body */ }
// this is function expression
// @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function
const/var/let myFunction = function myFunction(/* args */) { /* body */ }
// this is basically (unnamed) function expression, defining property `f1` on global object `window`
window.f1 = function (/* args */) { /* body */ }
如果您将第三种方法更改为第二种方法,则它将绑定到某个范围(放置它的代码块)。而第三种方法始终是全局的(可在任何地方使用)。
请注意,您也可以使用第一种和第二种方法在全局范围内声明函数。例如:
<head>
<script>function myFunction() {/* body */}</script>
</head>
window
在浏览器中,global
在 Node 环境中),因此它可以在任何地方访问,例如 console
对象。window.f1 = function(){}
==> 因为你将它附加到window对象上,所以它会明确地使你的函数成为全局的,并且可以从任何地方访问。
funtion f1(){}
和 var vaiable = f1(){}
==> 这样你的函数可以根据是否封装在另一个函数中而成为全局或局部的。
所有三种函数声明/表达式都会产生全局函数。但要注意第三个函数表达式:
window.f1 = function(){};
它在浏览器中运行良好,但在其他环境(例如 Node)中由于全局对象的差异会抛出错误。