JavaScript: global scope

此生再无相见时 提交于 2019-12-31 10:49:22

问题


Nowdays, i create a .js file with a lot of functions and then I link it to my html pages. That's working but I want to know what's the best way (good practices) to insert js in my pages and avoid conflicts with scope... Thank you.


回答1:


You could wrap them in an anonymous function like:

(function(){ /* */ })();

However, if you need to re-use all of the javascript functions you've written elsewhere (in other scripts), you're better off creating a single global object on which they can be accessed. Either like:

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

or the alternative, shorter syntax (which does the same thing):

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

This can then be accessed later from other scripts like:

mySingleGlobalObject.someMethod('jack', 'jill');



回答2:


A simple idea is to use one object that represents your namespace:

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

    }
};

var jim= new NameSpace.Person("Jim", 30);



回答3:


The best way is to create a new scope and execute your code there.

(function(){
  //code here
})();

This is best used when the global scope is accessed at a minimum.

Basically, this defines an anonymous function, gives it a new scope, and calls it.




回答4:


It's perhaps not the BEST way, but a lot of PHP systems (I'm looking at you, Drupal) take the name of their particular plugin and prepend it to all their function names. You could do something similar, adding the name of your capability to your function names - "mything_do_action()"

Alternately, you could take a more "OO" approach, and create an object that encapsulates your capability, and add all your functions as member functions on IT. That way, there's only one thing in global scope to worry about.



来源:https://stackoverflow.com/questions/3265823/javascript-global-scope

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!