javascript 中的全局函数

Global functions in javascript

本文关键字:函数 全局 javascript      更新时间:2023-09-26

我是js的新手,试图理解全局和私有函数。我了解全局变量和局部变量。但是如果我有一个名为 test.html 的 html 和一个名为 test1.jstest2.js 的 2 个 js 文件.现在我在test.html中包含test1.jstest2.js,并在test1.jstest.html中调用用test2.js编写的函数。

我在test2中编写的函数.js采用这种形式

function abc(){...}
function pqr(){...} etc.

上述功能是全局的吗?如果是,我怎么能不将它们全局化并且仍然以test1.jstest.html访问它们?

正如我读过的全局函数或全局变量不好吗?

JS中的所有内容都绑定到包含范围。因此,如果直接在文件中定义function,它将绑定到window对象,即它将是全局的。

要使其"私有",您必须创建一个对象,其中包含这些功能。您是正确的,乱扔全局范围是不好的,但是您必须在全局范围内放置一些东西才能访问它,JS库也这样做,并且没有其他解决方法。但是想想你在全局范围内放置的内容,单个对象对于您的"库"来说应该绰绰有余。

例:

MyObject = {
    abc: function(...) {...},
    pqr: function(...) {...}
    // other functions...
}

要为某处调用abc,无论是同一个文件还是另一个文件:

MyObject.abc(...);

在 test2 中.js你可以这样写来使函数全局化

window.abc = function(){...}

然后在test1中.js yo可以像这样访问它

window.parent.abc();

我希望它能帮助你

文件中定义的任何内容,如果没有任何类型的包装器,都将绑定到窗口对象。绑定到窗口对象的任何内容都是全局的。

例:

//these are global variables
foo = 123;
var ABC = 'school';
//these are "private" variables
test = function(){
  var foo = 123
}
(function(){
  var ABC = 'school';
}).call(this);

由于每个文件中的全局变量都是window对象的一部分,因此您可以在文件之间访问它们。在创建"私有"变量时,添加var很重要。这表示覆盖当前"包装器"中的任何全局变量。如果我有一个全局变量foo并且我在函数中再次定义它,var它们将是分开的。

var foo = 123;
(function(){
  var foo = 987; //this foo is separate from the above foo
}).call(this);

如果你有一个"包装器",并且你想定义一个全局函数,你可以这样做:

window.foo = 123;
(function(){
  window.foo = 123;
}).call(this);

这两个函数将执行相同的操作。

就个人而言,我更喜欢将所有内容放在包装器中,并且仅在需要时才使用 window 定义全局变量。

(function(){
  //all code goes here
  //define global variable
  window.foo = 123;
})call(this);
var SomeName = function() {
    var function1 = function (number) {
        return number+1;
    }
    var anotherFunction = function (number) {
        return number+2;
    }
    return {
        function1: function (number) {
            return function1(number);
        },
        function2: function (number) {
            return anotherFunction(number);
        }
    }
}();

console.log(SomeName.function1(1)); //logs 2
console.log(SomeName.function2(1)); //logs 3

使用全局数据的现代方法(2020 年(是使用全局对象文字并在那里定义所有需要的逻辑。

const Website = {
  foo () {
    console.log('foo')
  },
  
  bar () {
    console.log('bar')
  }
}
document.addEventListener('DOMContentLoaded', () => {
  Website.foo()
  Website.bar()
})

如果你的代码比几行更复杂,你需要将你的代码分成多个文件,并使用 webpack 将它们合并到一个文件中。

import Foo from './js/Foo.js'
import Bar from './js/Bar.js'
// define here another object literal or setup document events.
// webpack will merge all this together into one file
<script src="js/webpack-merged.js"></script>

此处描述了您不想使用 html 导入单个 js 文件的原因。它的要点是你的性能会很差,所以你必须捆绑所有的js。

如果你不明白为什么全局变量不好,那你为什么要避免它们呢?

全局函数不一定是坏事。不好的是声明任何人和任何事情都会改变。

一般来说,由于您不熟悉 Javascript,因此可以从分布在多个 javascript 文件中的全局函数开始,这些函数通过脚本标签包含在 html 文件中。

当你从初学者过渡到中级时,你将不得不研究一些"模块"解决方案(我个人推荐RequireJS(。

不过现在,您可以使用更简单的模块模式:

var T1 = function() {
   return < some module object >
})(); // notice the parenthesis

谷歌"Javascript模块模式"。

另请参阅此答案。

vos fonctions ne sont pas global si vous faite l'erreur de les incorporé dans par exemple :

$( document ).ready(function() {  
function myglobalfunction() { ... }
});

Vous Devez Retirer

$( document ).ready(function() {
<小时 />

如果你错误地嵌入了它们的函数,你的函数不是全局的,例如:

$(document) .ready (function () {
function myglobalfunction () {
...
}
});

您必须删除

$ (document) .ready (function () {