javascript 中的全局函数
Global functions in javascript
我是js的新手,试图理解全局和私有函数。我了解全局变量和局部变量。但是如果我有一个名为 test.html
的 html 和一个名为 test1.js
和 test2.js
的 2 个 js 文件.现在我在test.html
中包含test1.js
和test2.js
,并在test1.js
和test.html
中调用用test2.js
编写的函数。
我在test2中编写的函数.js采用这种形式
function abc(){...}
function pqr(){...} etc.
上述功能是全局的吗?如果是,我怎么能不将它们全局化并且仍然以test1.js
和test.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 () {
- 正在全局范围中查找JavaScript函数
- 在javascript函数中设置全局变量
- javascript无法重新定义函数内部的全局对象
- javascript 中的全局函数
- cordova:例外:财产'requestFileSystem'的[对象全局]不是函数
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- Javascript,从静态函数中打印全局对象
- 全局窗口热键在最小化chrome窗口时调用js函数
- 创建要在其他函数中使用的全局变量
- 从全局函数调用Ember控制器上的方法
- 保留 JQuery Vars 用于另一个函数(全局变量?)
- jQuery-函数全局变量
- jQuery - 如何使这个javascript函数全局化,以便其他函数可以访问它
- JS函数/全局变量的作用域
- Javascript;如何使函数全局可访问
- 全局在什么(函数(全局){一些代码.(这个)做
- 如何使用 (函数(全局) { .. })(这);.
- 我如何使变量newUser定义在一个函数全局
- 函数(全局){..}(this)的工作方式
- 我如何使我的变量包含在这个函数全局