JavaScript 通常遵循函数范围,即变量只能在声明它们的函数内访问。
打破这种约定并使变量在函数范围之外可访问的方法之一是使用全局窗口对象,例如
window.myVar = 123;
我的问题是 JavaScript/jQuery 中还有其他方法可以使变量在函数范围之外访问吗?
JavaScript 通常遵循函数范围,即变量只能在声明它们的函数内访问。
打破这种约定并使变量在函数范围之外可访问的方法之一是使用全局窗口对象,例如
window.myVar = 123;
我的问题是 JavaScript/jQuery 中还有其他方法可以使变量在函数范围之外访问吗?
没有变量声明,不。您显然可以在外部范围内声明一个变量,以便所有后代范围都可以访问它:
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
}
正如您所写,变量仅在定义它们的函数内部可见(除非它们是全局的)。
您可以做的是将变量分配给函数对象本身:
function foo() {
foo.myVar = 42;
}
console.log(foo.myVar); // outputs "undefined"
foo();
console.log(foo.myVar); // outputs "42"
但我建议不要这样做。你真的应该有一个很好的理由去做这样的事情。
您可以将它们定义为全局对象的一部分,然后再添加变量
// 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
};
请参阅以下链接:
此外,您可以在没有var关键字的情况下声明它。但是,这可能不是一个好的做法,因为它会污染全局命名空间。(确保严格模式未开启)。
编辑: 发布前我没有看到其他评论。@JamesAllardice 的回答也不错。