0

我想要一种快速简单的方法来“获得”JavaScript 变量的所有权。例如:

function takeown( obj ) {
     obj = obj;
}

takeown( window.undefined );

那么这是否设置window.undefinedwindow.undefined

对不起,n00b 的问题,但是,我是 javascript 的 n00b。

4

2 回答 2

3

这将无济于事。Javascript 变量是对内存中对象的引用。您的函数接受一个引用并将其指向它先前引用的同一对象,使其(如评论中所述)成为无操作。

如果要重新定义 window.undefined,只需将其设置为新值即可(不建议这样做)。Javascript 不会以您可能期望的方式保护其全局变量。大多数内置值都可以重新定义或扩充。

更新

由于您在评论中明确表示您真正想要的是一种防止将来修改变量的方法,因此最好的方法是使用闭包。

闭包是一种利用 javascript 的作用域处理来模拟私有变量和保护作用域的方法。特别是在这种情况下,您可以执行以下操作:

function createConstant(){

     var const = 3;
     return function(){
         return const;
     }
}

这将创建一个不可变地返回 3 的函数。所以 :

createConstant()

将始终返回 3。(尽管从技术上讲,您可以重新定义创建常量以引用新函数。在某种程度上,对于这些东西无能为力。

于 2013-01-26T02:11:09.367 回答
0

你想要做的是覆盖一个全局变量(我不明白你为什么要这样做),这样做是这样的:

window.Counter = 'whatever';
// so
window.Counter // => 'whatever'

您的函数将变量分配给同一变量...无操作。但是,自javascript 1.8.5(链接)以来, undefined是不可写的,我认为任何其他全局变量都是可写的。

干杯,

于 2013-01-26T02:13:16.437 回答