Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript变量的窗口与应用程序范围_Javascript_Jquery_Object_Namespaces_Scope - Fatal编程技术网

Javascript变量的窗口与应用程序范围

Javascript变量的窗口与应用程序范围,javascript,jquery,object,namespaces,scope,Javascript,Jquery,Object,Namespaces,Scope,有人能解释一下把所有变量放在应用程序范围和窗口范围的原因吗?应用范围是否总是更好 表演 防止给儿子命名 其他原因 窗口范围 var myFunction1=function(){ //do something }; var myFunction2=function(){ //do something else }; var myObject1={ //store stuff }; var myDOMElement1=$('.myDOMElement1'); var my

有人能解释一下把所有变量放在应用程序范围和窗口范围的原因吗?应用范围是否总是更好

  • 表演
  • 防止给儿子命名
  • 其他原因
  • 窗口范围

    var myFunction1=function(){
       //do something
    };
    
    var myFunction2=function(){
       //do something else
    };
    
    var myObject1={
       //store stuff
    };
    
    var myDOMElement1=$('.myDOMElement1');
    
    var myApplication={
       'myFunction1':function(){
          //do something
       },
       'myFunction2':function(){
          //do something else
       },
        'myObject1':{
          //store stuff
       },
        'myDOMElement1':$('.myDOMElement1')
    };
    
    适用范围

    var myFunction1=function(){
       //do something
    };
    
    var myFunction2=function(){
       //do something else
    };
    
    var myObject1={
       //store stuff
    };
    
    var myDOMElement1=$('.myDOMElement1');
    
    var myApplication={
       'myFunction1':function(){
          //do something
       },
       'myFunction2':function(){
          //do something else
       },
        'myObject1':{
          //store stuff
       },
        'myDOMElement1':$('.myDOMElement1')
    };
    

    原因是信息隐藏和封装。 由于JavaScript没有内置的模块(或组件或类)概念,为了组织代码,必须采用类似于“应用程序范围”中显示的模式


    要获得更全面的解释,请在Internet上搜索“JavaScript模块模式”。

    这不是“应用程序”范围。这只是一个对象的名称空间。vanilla JS没有“应用程序”范围。不应该有任何主要的性能差异,但是不在窗口中定义内容会使您的代码由于不相关或编写不好的代码而不容易出错。@KevinB那么您说主要是为了最小化人为错误,而不是为了提高性能?是的,javascript中的大多数模式更多的是为了防止人为错误,使人们更容易阅读/修改,而不是为了提高性能。以jQuery为例(尽管它不是一种模式)。jQuery的性能远不如本机javascript,但它使我们人类更容易读/写/修改它。@MattBall感谢您的更正,所以考虑到KevinB所说,我猜这是微观优化,如果我们处理的是一个小的代码库,就不必担心了?@Michael那么基本上KevinB在上面的评论中说“应用程序”范围不太容易出现人为错误?防止名称冲突也很重要。在一个复杂的页面上加载多个第三方库和小部件是很常见的,这种模式将潜在的名称冲突降至最低。@Timperson,Barmar:我同意这两种意见。它们都是在模块中构建代码的副产品。在模块中组织代码的好处太多了,在StackOverflow帖子中无法回答。