临时替换局部作用域中的全局变量
Replace a global variable temporarily in a local scope
在问任何问题之前,我先说这是一个理论问题;但是,它可能会在以后的网站上实现。
总之,我有一个变量,任何变量。假设它是a
,它的作用域是全局的。现在,对于一个特定的函数,我想将该变量的值设置为与全局值不同的值,但是基于它,并且不改变的全局值。例如:
a = {something: "Safe", other: "Foo"}
function hello(){
var a = a.other; // Foo
a.something; // Undefined
}
a.something; // Safe
a.other; // Foo
上面代码的问题是,当我在函数中定义var a
时,它将在设置之前已经在本地清除全局a
的值;换句话说,它将返回类似Can't access property [other] of undefined [a]
的内容。
同样,a
应该仍然是a
(所以使用另一个变量名不是一个选项,或者至少不是理想的)。事实上,全局a
不应该被函数hello
访问。
编辑: window
也将被null
覆盖,关于米兰贾里奇的回答。
提前感谢!
每个全局变量都可以使用窗口对象访问,只需稍微更改代码,下面是示例
a = {something: "Safe", other: "Foo"}
function hello(){
var a = window.a.other; // Foo
console.log(window.a.something); // Safe
}
a.something; // Safe
a.other; // Foo
hello();
或
a = {something: "Safe", other: "Foo"}
function hello(){
var a = this.a.other; // Foo
delete a;
console.log(this.a.something); // Safe
}
a.something; // Safe
a.other; // Foo
hello();
这就是我要找的…现在,在你认为我在问之前有答案之前,我没有,我只能根据米兰·贾里奇的回答达成一个切实的解决方案(顺便说一句)。
a = {something: "Safe", other: "Foo"}
function hello(b){
var window = null;
var a = b; // a.other;
a.something; // Undefined
}
a.something // Safe
a.other // Foo
hello(a.other)
(我从来没有真正说过什么可以或不可以在函数之外)。
假设它的作用域是全局的
你的意思是"a是一个全局变量"。
…对于一个特定的函数,我想把这个变量的值设为不是全局值,而是基于全局值,而不是全局值修改全局值
不可能的。你可以在作用域链上创建一个具有相同名称的变量,但是你不能有条件地创建变量对象的属性(即用于作用域链上标识符解析的对象)。你只能声明局部变量,这意味着它们在任何代码运行之前就存在,因此不能是有条件的,或者你可以直接赋值给一个未声明的标识符,此时它将成为一个全局变量。
(剪掉代码)上面代码的问题是,当我在函数时,它将已经清除全局变量a的值
代码没有以任何方式"清除"a
的值。它创建了一个局部变量a,这样标识符a将解析为该变量,而不是全局的a。为了区分这两者,您可以将全局a
作为全局对象的属性访问:
var a = 'whatever';
var myFunction = (function(global) {
return function() {
var a; // local a
global.a; // global a
}
}(this));
同样,a仍然应该是a(所以使用另一个变量名不是a)选项,或者至少不是理想的选项)。事实上,全球a应该不能从hello.
函数访问
不可能,尽管在ES5严格模式下几乎是可能的,前提是试图访问全局的代码在另一个函数中,并且无法获得对全局对象的引用。
- 带有KendoUI组件的Javascript变量作用域
- Javascript变量作用域:从回调函数中提取变量
- 使用JavaScript回调函数了解变量作用域和闭包
- jquery.post和变量作用域
- 变量作用域:在函数之间传递的名称
- 在 AJAX 和 Javascript 中使用变量和变量作用域
- 节点.js/express.js中的变量作用域
- jquery ajax 回调变量作用域(为什么有些在作用域中,而另一些则不在作用域中)
- JavaScript 中的变量作用域
- ajax GET 和 POST 中的变量作用域
- Javascript:变量作用域和全局变量的弊端
- Javascript 自执行函数和变量作用域
- 拼接上的Javascript全局变量作用域/覆盖
- 在Node中与jsdom和jquery共享变量作用域
- NodeJS:代码优化和变量作用域
- Javascript数组变量作用域
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- javascript中node.js的全局变量作用域
- JavaScript全局变量作用域问题
- Jquery和全局变量作用域之间的问题