JavaScript";“收购”;功能?
我想要一种快速简单的方法来“拥有”JavaScript变量。例如:JavaScript";“收购”;功能?,javascript,variables,dom,object,Javascript,Variables,Dom,Object,我想要一种快速简单的方法来“拥有”JavaScript变量。例如: function takeown( obj ) { obj = obj; } takeown( window.undefined ); 这是否将window.undefined设置为window.undefined 很抱歉问n00b这个问题,但是,我是javascript的n00b。这没什么用。Javascript变量是对内存中对象的引用。您的函数获取一个引用并将其指向之前引用的同一对象,使其(如注释中所述)成为禁
function takeown( obj ) {
obj = obj;
}
takeown( window.undefined );
这是否将window.undefined
设置为window.undefined
很抱歉问n00b这个问题,但是,我是javascript的n00b。这没什么用。Javascript变量是对内存中对象的引用。您的函数获取一个引用并将其指向之前引用的同一对象,使其(如注释中所述)成为禁止操作 如果要重新定义window.undefined,只需将其设置为新值即可(不建议这样做)。Javascript没有以您可能期望的方式保护其全局变量。大多数内置值都可以重新定义或扩充 更新 既然您在评论中明确表示,您真正想要的是一种防止将来修改变量的方法,那么最好的方法就是使用闭包 闭包是一种利用javascript对作用域的处理来模拟私有变量和保护作用域的方法。特别是在这种情况下,您可以执行以下操作:
function createConstant(){
var const = 3;
return function(){
return const;
}
}
window.Counter = 'whatever';
// so
window.Counter // => 'whatever'
这将创建一个不可变返回3的函数。因此:
createConstant()
将始终返回3。(虽然从技术上讲,您可以重新定义create constant以引用新函数。在某个级别上,对此内容无法执行任何操作。这将不起任何作用。Javascript变量是对内存中对象的引用。您的函数获取一个引用,并将其指向以前引用的同一对象making它(如评论中所述)是不可操作的 如果要重新定义window.undefined,只需将其设置为新值即可(不建议这样做)。Javascript不会以预期的方式保护其全局变量。大多数内置值可以重新定义或扩充 更新 既然您在评论中明确表示,您真正想要的是一种防止将来修改变量的方法,那么最好的方法就是使用闭包 闭包是一种利用javascript对作用域的处理来模拟私有变量和保护作用域的方法。具体来说,在这种情况下,您可以执行以下操作:
function createConstant(){
var const = 3;
return function(){
return const;
}
}
window.Counter = 'whatever';
// so
window.Counter // => 'whatever'
这将创建一个不可变返回3的函数。因此:
createConstant()
将始终返回3。(虽然从技术上讲,您可以重新定义create constant以引用新函数。在某个级别上,对此内容无法执行任何操作。您试图做的是重写全局变量(我不明白您为什么要这样做),操作如下:
function createConstant(){
var const = 3;
return function(){
return const;
}
}
window.Counter = 'whatever';
// so
window.Counter // => 'whatever'
您的函数将一个变量分配给同一个变量…no-op。
但是,undefined是不可写的,因为javascript 1.8.5(),我认为任何其他全局变量都是可写的
干杯,您要做的是覆盖一个全局变量(我不明白您为什么要这么做),这是这样做的:
function createConstant(){
var const = 3;
return function(){
return const;
}
}
window.Counter = 'whatever';
// so
window.Counter // => 'whatever'
您的函数将一个变量分配给同一个变量…no-op。
但是,undefined是不可写的,因为javascript 1.8.5(),我认为任何其他全局变量都是可写的
干杯,…你想做什么?@PlatinumAzure好吧,我可以做
window.undefined=window.undefined
,但我想知道我发布的内容是否会做同样的事情。例如,获取参数obj
并将其设置为自身。这样,当我调用takeown()
和pass窗口。未定义的
作为参数,它会“重新定义”它。您不能“覆盖”未定义的窗口,undefined=“blop”,undefined仍将是undefined。不,undefined很容易被覆盖。请参阅Paul Irish的解释。@Kolink,没有像中那样的操作,它没有任何作用?…你想做什么?@PlatinumAzure嗯,我可以做window.undefined=window.undefined
,但我想知道我发布的内容是否也会做同样的事情。例如,使用参数erobj
并将其设置为自身。这样,当我调用takeown()
并传递window.undefined
作为参数时,它会“重新定义”它。您无论如何都不能“覆盖”undefined,undefined=“blop”,undefined仍将是undefined。不,undefined很容易被覆盖。请参阅Paul Irish的解释。@Kolink,没有操作,如中所述,它什么都不做?这就是我所想的。此外,它不是无限的吗?那么绝对什么都不做……为什么不建议只使用全局变量。但我不太清楚您要实现什么。window.undefined=window.undefined
Simple。它甚至不必是“window.undefined”,这正是我首先想到的。所以,我可以做var x=“foo”;takeown(x);//将x设置为x infinitley,这样它就不可重写了
啊,我明白了。你想要的是阻止另一段代码编辑变量。因此你需要闭包。我会更新我的答案。好的,我现在明白你想要什么了。你应该使用闭包。这就是我的想法。此外,它不是无限的吗?然后做一个测试B完全没有什么…为什么不建议您使用var undf=undefined
?没有理由只使用全局变量就这样做。不过,我不太清楚您想要实现什么。window.undefined=window.undefined
很简单。它甚至不一定需要是“window.undefined”,这正是我首先想到的。所以,我可以做var x=“foo”takeown(x);//将x设置为x infinitley,这样它就不可重写了
啊,我明白了。你想要的是阻止另一段代码编辑变量。因此你需要闭包。我会更新我的答案。好的,我现在明白你想要什么了。你应该使用闭包。