JavaScript:全球范围

tho*_*mas 9 javascript scope global

现在,我创建了一个包含许多函数的.js文件,然后将其链接到我的html页面.这是有效的,但我想知道在我的页面中插入js并避免与范围冲突的最佳方法(良好做法)...谢谢.

luc*_*eer 13

您可以将它们包装在匿名函数中,如:

(function(){ /* */ })();
Run Code Online (Sandbox Code Playgroud)

但是,如果您需要重新使用您在其他地方(在其他脚本中)编写的所有javascript函数,那么最好创建一个可以访问它们的单个全局对象.要么:

var mySingleGlobalObject={};
mySingleGlobalObject.someVariable='a string value';
mySingleGlobalObject.someMethod=function(par1, par2){ /* */ };
Run Code Online (Sandbox Code Playgroud)

或替代,更短的语法(做同样的事情):

var mySingleGlobalObject={
  someVariable:'a string value',
  someMethod:function(par1, par2){ /* */ }
};
Run Code Online (Sandbox Code Playgroud)

然后可以从以下其他脚本访问它:

mySingleGlobalObject.someMethod('jack', 'jill');
Run Code Online (Sandbox Code Playgroud)


Cha*_*ion 10

一个简单的想法是使用一个代表您的命名空间的对象:

var NameSpace = {
    Person : function(name, age) {

    }
};

var jim= new NameSpace.Person("Jim", 30);
Run Code Online (Sandbox Code Playgroud)


tco*_*ooc 6

最好的方法是创建一个新的范围并在那里执行代码.

(function(){
  //code here
})();
Run Code Online (Sandbox Code Playgroud)

最好在访问全局范围时使用此方法.

基本上,这定义了一个匿名函数,给它一个新的范围,并调用它.


Cur*_*tis 1

这也许不是最好的方法,但是很多 PHP 系统(我正在看你,Drupal)都会采用他们特定插件的名称并将其添加到所有函数名称之前。您可以做类似的事情,将您的功能名称添加到函数名称中 - “mything_do_action()”

或者,您可以采用更“OO”的方法,创建一个封装您的功能的对象,并将所有功能添加为 IT 上的成员功能。这样,全球范围内就只需要担心一件事。