相关疑难解决方法(0)

JavaScript中的变量范围是什么?

javascript中的变量范围是什么?它们的内部是否与函数外部相同?或者甚至重要吗?另外,如果变量是全局定义的,那么它们存储在哪里?

javascript variables scope var function

1952
推荐指数
18
解决办法
48万
查看次数

什么是"泄漏"到全球范围?

不久之前,我提出了一个JavaScript设计模式(模块模式 - 见下文),我从John Resig的例子中得到了一个解决某人问题的一部分,我收到了以下评论:

"......这种模式有点过于设计而不是那么好.仍然渗透到全球范围.而你不打开自己的异步装载机.但它比ad-hoc编码更好!"

所以…

如果"泄漏"到全局范围意味着"您的对象被附加到浏览器窗口(对象)"......那么所有内容都已经被追加(全局):

这"泄漏"到全球范围:

window.jQuery
Run Code Online (Sandbox Code Playgroud)

...只需调用: window.jQuery并将其解析为函数();

这"泄漏"到全球范围:

function HelloWorld() { alert(‘Howdy’); }
Run Code Online (Sandbox Code Playgroud)

......打电话给window.HelloWorld()你:你会得到'你好'.

这"泄漏"到全球范围:

var myVariable = 10;
Run Code Online (Sandbox Code Playgroud)

......打电话给window.myVariable你:你会得到10分

如果评论者是正确的,那么以上所有"泄漏"到全球范围.所以,就个人而言,我没有看到一种不"泄漏"到全局范围内的方法,因为即使你的表单控件也存在(也是如此).

因此,这是我的问题......

  • 什么是"泄漏"到全球范围?
  • 为什么那么糟糕?
  • 你怎么避免它?
  • 当想要创建持久的自定义对象时,为什么模块模式(下面)不好?
  • 设计模式让你封装复杂的逻辑,封装突然变坏只是因为我们用JavaScript编写
  • 或者......这个评论者完全错了吗?

这是我上面提到的模块模式:

<script type="text/javascript">
    var myNamespace = (function($) {
        var publicInstances = {};

        // ***********************
        // myObject
        publicInstances.myObject = myObject;
        function myObject() {

            /// <summary>A pointer to this</summary>
            var self = this;

            this.someProperty = new String();

            this.initialize = function() { …
Run Code Online (Sandbox Code Playgroud)

javascript jquery design-patterns globals

17
推荐指数
2
解决办法
5697
查看次数