我想通过 set 函数设置一个全局变量,但它总是将其设置为undefined
值:
var name;
var setName = function(name){
this.name = name;
}
我想通过 set 函数设置一个全局变量,但它总是将其设置为undefined
值:
var name;
var setName = function(name){
this.name = name;
}
在这种情况下,您不使用this
. (它可以工作,但不一定。为什么?读这个)
只需使用:
var name;
var setName = function (aname) {
name = aname;
}
还要确保此代码不在另一个范围(函数)内:
function foo() {
// ...
var name;
var setName = function (aname) {
name = aname;
}
// ...
}
在这种情况下,名称将不是全局的,您必须省略其声明以使其成为全局:
function foo() {
// ...
var setName = function (aname) {
name = aname; // not it is global, if not defined in the visible scope
}
// ...
}
但这是一个不好的做法,所以尽量避免污染全局命名空间。如果出现以下情况,则在全局命名空间中考虑变量:
var
( name = ...
,并且没有其他可见的局部变量称为name
window
(例如window.name = ...
)function(val){
name = val
.....................
首先,window.name 是一个保留属性,您不应该使用它。
其次,为任何全局 JavaScript 命名空间是个好主意,以避免这些类型的问题或与第三方库的冲突。
这是一个工作示例:
window.MyNamespace = {};
MyNamespace.name = '';
MyNamespace.setName = function(value) {
MyNamespace.name = value;
};
MyNamespace.setName('hello');
MyNamespace.name; // "hello"
根据您对此在模块中的评论,此代码将起作用:
(function(){
app = {};
app.myPerson = (function(){
var name;
var setName = function(value) {
name = value;
};
setName('Charlie');
console.log(name); // Charlie
})();
})();