在javascript中,window.function(){}和var variable=function之间有什么区别?

在javascript中,window.function(){}和var variable=function之间有什么区别?,javascript,function,Javascript,Function,我正在编写一个javascript代码,其中函数以三种不同的方式定义 funtion f1(){} 第二 var vaiable = f1(){} 第三 window.f1 = function(){} 我读过前两篇,但不知道最后一篇 如果我把第三个换成第二个会有问题吗 第三种类型的优点和缺点是什么 为什么特别使用它?第三个被分配到全局范围(浏览器中的窗口,节点环境中的全局),因此它可以在任何地方访问,例如控制台对象 // this is function declaration in J

我正在编写一个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>

函数myFunction(){/*body*/}
请看

window.f1=function(){}
==>由于您将其附加到窗口,它将显式地使您的函数成为全局函数,并且可以从任何地方访问


funition f1(){}
var vaiable=f1(){}
==>这样,您的函数可以是全局函数,也可以是局部函数,具体取决于它们是否封装在另一个函数中。

所有三个声明的函数声明/表达式也将生成全局函数。但请注意第三个函数表达式:

window.f1 = function(){};

它在浏览器中运行良好,但由于全局对象的不同,在其他环境(如Node)中会引发错误。

这取决于您希望它执行的具体操作。一般来说,除非真的有必要,否则你应该避免使用#3。可能的重复也很有帮助