打破JavaScript范围的方法

时间:2013-07-25 07:32:29

标签: javascript jquery

JavaScript通常遵循函数范围,即变量只能在声明它们的函数中访问。

打破此约定并使函数在函数范围外可访问的方法之一是使用全局窗口对象 例如

window.myVar = 123;

我的问题是JavaScript / jQuery中有没有其他方法可以在函数范围之外访问变量?

3 个答案:

答案 0 :(得分:6)

没有变量声明,没有。显然,您可以在外部作用域中声明一个变量,以便所有后代作用域都可以访问它:

var a; // Available globally
function example() {
    a = "hello"; // References a in outer scope
}

如果您未处于严格模式,则只需删除var关键字即可。这相当于您的示例:

// a has not been declared in an ancestor scope
function example() {
    a = "hello"; // a is now a property of the global object
}

这是非常糟糕的做法。如果函数在严格模式下运行,它将抛出引用错误:

function example() {
    "use strict";
    a = "hello"; // ReferenceError: a is not defined
}

答案 1 :(得分:0)

正如您所写,变量仅在定义它们的函数内可见(除非它们是全局变量)。

您可以做的是将变量分配给函数对象本身:

function foo() {
    foo.myVar = 42;
}

console.log(foo.myVar); // outputs "undefined"
foo();
console.log(foo.myVar); // outputs "42"

但我会反对它。你应该有一个很好的理由去做这样的事情。

答案 2 :(得分:0)

您可以将它们定义为全局对象的一部分,然后稍后添加变量

// Define your global object
var myObj = {};
// Add property (variable) to it
myObj.myVar = 'Hello world';
// Add method to it
myObj.myFunctions = function() {
    // Do cool stuff
};

请参阅以下链接:

Variable declaration

此外,您可以在没有 var 关键字的情况下声明它。但是,这可能不是一个好习惯,因为它会污染全局命名空间。 (确保未启用严格模式)。

修改 在发布之前我没有看到其他评论。 @JamesAllardice答案也不错。