在javascript中,window.function(){}和var variable=function之间有什么区别?
我正在编写一个javascript代码,其中函数以三种不同的方式定义在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
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。可能的重复也很有帮助