Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript";“收购”;功能?_Javascript_Variables_Dom_Object - Fatal编程技术网

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变量是对内存中对象的引用。您的函数获取一个引用并将其指向之前引用的同一对象,使其(如注释中所述)成为禁

我想要一种快速简单的方法来“拥有”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
,但我想知道我发布的内容是否也会做同样的事情。例如,使用参数er
obj
并将其设置为自身。这样,当我调用
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,这样它就不可重写了
啊,我明白了。你想要的是阻止另一段代码编辑变量。因此你需要闭包。我会更新我的答案。好的,我现在明白你想要什么了。你应该使用闭包。