访问外部作用域中的变量?

发布于 2024-10-09 21:33:18 字数 219 浏览 2 评论 0原文

(function () {
    var x = 1;
    return {
        f: function (x) {
            alert(x);
        }
    };
}()).f(2);

假设我不想重命名这两个变量。没有办法从 f 内部访问首先声明的变量 x - 对吗?

(function () {
    var x = 1;
    return {
        f: function (x) {
            alert(x);
        }
    };
}()).f(2);

Suppose I don't want to rename either variable. There is no way to, from within f, access the variable x, which was declared first - right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

那片花海 2024-10-16 21:33:18

正确的。由于 function (x) 中有不同的 x,因此任何访问 x 的尝试都将获得该值(最近的作用域)。它会阻止对更广泛范围内的任何 x 的访问。

Correct. Because you have a different x in function (x), any attempt to access x will get that one (the nearest scope). It blocks access to any x in a wider scope.

濫情▎り 2024-10-16 21:33:18

这允许您同时使用 x (1) 和 x (2)。

(function () {
    var x = 1;
    return {
        f: function (x) {
            alert(x); // paramter (=2)
            alert(this.x); // scoped variable (=1)
        },
        x:x
    };
}()).f(2);

This allows you to use both x (1) and x (2) at the same time.

(function () {
    var x = 1;
    return {
        f: function (x) {
            alert(x); // paramter (=2)
            alert(this.x); // scoped variable (=1)
        },
        x:x
    };
}()).f(2);
会发光的星星闪亮亮i 2024-10-16 21:33:18

您可以使用以下函数返回变量:

(function () {
    var x = 1;
    return {
        f: function () {
            alert(this.x);
        },
        x:x
    };
}()).f();

You could return the variable with the function:

(function () {
    var x = 1;
    return {
        f: function () {
            alert(this.x);
        },
        x:x
    };
}()).f();
寒江雪… 2024-10-16 21:33:18

无法从 f 内部访问首先声明的变量 x

不,没有。内部作用域x隐藏外部作用域x

var closure = (function () {
    var local = {};
    local.x = 1;
    return {
        f: function (x) {
            alert(x || local.x);
        }
    };
}());

closure.f(2);  // alerts "2"
closure.f();   // alerts "1"

当然,你不能有一个名为“local”的内部变量。 ;-)

There is no way to, from within f, access the variable x, which was declared first

No, there is not. The inner scope x hides the outer scope x.

var closure = (function () {
    var local = {};
    local.x = 1;
    return {
        f: function (x) {
            alert(x || local.x);
        }
    };
}());

closure.f(2);  // alerts "2"
closure.f();   // alerts "1"

You can't have an inner variable called "local", of course. ;-)

空城缀染半城烟沙 2024-10-16 21:33:18

意识到隐式异步调用使您认为无法从外部范围访问变量:

result = {}
jQuery.ajax({ // it is a async call!
    url: "/some/url",
    success: function(data) {
        result = JSON.parse(data);
    }
});

return result; // Result will be still {} because function returns before request has done.

Aware of implicit async calls which make you think that you can't access of variable from outer scope:

result = {}
jQuery.ajax({ // it is a async call!
    url: "/some/url",
    success: function(data) {
        result = JSON.parse(data);
    }
});

return result; // Result will be still {} because function returns before request has done.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文