相关疑难解决方法(0)

通过JavaScript中的名称字符串动态获取全局变量

<script>
//in one script
var someVarName_10 = 20;
</script>
Run Code Online (Sandbox Code Playgroud)

我希望通过变量名称从另一个脚本访问此变量.窗口对象很简单,是否可以使用局部变量?

我的意思是通过以下代码访问此var:

<script>
  alert(all_vars['someVar' + 'Name' + num]);
</script>
Run Code Online (Sandbox Code Playgroud)

javascript

74
推荐指数
3
解决办法
6万
查看次数

如何在javascript中动态访问本地范围?

如果要动态使用全局函数和变量,可以使用:

window[functionName](window[varName]);
Run Code Online (Sandbox Code Playgroud)

是否可以对本地范围内的变量执行相同的操作?

这段代码工作正常,但目前使用eval,我正在考虑如何做到这一点.

var test = function(){
    //this = window
    var a, b, c; //private variables

    var prop = function(name, def){
        //this = window
        eval(name+ ' = ' + (def.toSource() || undefined) + ';');    

        return function(value){
            //this = test object
            if ( !value) {
                return eval('(' + name + ')');
            }
            eval(name + ' = value;')
            return this;
        };

    };

    return {
        a:prop('a', 1),
        b:prop('b', 2),
        c:prop('c', 3),
        d:function(){
            //to show that they are accessible via to methods
            return …
Run Code Online (Sandbox Code Playgroud)

javascript scope

20
推荐指数
2
解决办法
2万
查看次数

Javascript:通过名称访问闭包中的局部变量或变量

可能重复:
如何在javascript中动态访问本地范围?

大家好.
我们都知道您可以使用[]语法通过它的名称访问javascript对象的属性.例如ob ['nameOfProperty'].

你能为局部变量做同样的事吗?这里的另一个答案表明答案是使用window ['nameOfVar'].然而,这只适用于海报,因为他在窗口级范围内定义变量.

我认为这通常是可能的,因为Firefox的Firebug(我认为是用javascript编写的)可以显示本地和闭包变量.是否有一些我不知道的隐藏语言功能?

具体来说,这就是我想要做的事情:

 var i = 4;
 console.log(window['i']); // this works..

 function Func(){
     var j = 99;

     // try to output the value of j from its name as a string
     console.log(window['j']); // unsurprisingly, this doesn't work
 }

 Func();
Run Code Online (Sandbox Code Playgroud)

javascript variables closures function local

14
推荐指数
2
解决办法
3万
查看次数

如何从闭包范围动态访问局部变量(通过其名称的字符串形式)?

在 Javascript 中,我习惯于通过使用[]操作符来“动态”访问已知命名空间中的变量(如果我在这里使用了错误的词,请纠正我)。例如(来自全局命名空间):

var a = 1;
window['a']; # => 1
Run Code Online (Sandbox Code Playgroud)

或者来自对象类型命名空间:

var a = { b: 1 };
a['b']; # => 1
Run Code Online (Sandbox Code Playgroud)

我熟悉如何this确定的基础知识:

var a = function(){ return this['c']; };
var b = { c: 1 };
a.apply(b); # => 1;
Run Code Online (Sandbox Code Playgroud)

但是在函数本身内,我如何访问我刚刚实例化(或重新定义)的局部变量var

即,我希望以下函数调用返回1调用a

function(){
  var a = 1;
  return a;
}
Run Code Online (Sandbox Code Playgroud)

你不能使用,window['a']因为a是在本地定义的,你不能使用,this['a']因为this根据调用函数的上下文而改变。

在现实环境中,我会简单地重构以避免动态创建和访问局部变量,因为这通常是一个坏主意,但作为一个学术问题,我很好奇是否可以a通过其字符串名称进行访问。

javascript closures

5
推荐指数
1
解决办法
1698
查看次数

我怎样才能*解压*一个对象到一个函数的作用域中?

我有这个代码...

function a(options) {
    for (var item in options) {
       if ( ! options.hasOwnProperty(item)) {
          continue;
       }
       this[item] = options[item];
    }
}

a({ 'abc': 'def' });
Run Code Online (Sandbox Code Playgroud)

js小提琴

虽然从物体以上述解包的变量,它他们设置为全局范围(附着window),因为thiswindow在那种情况下。

所以在我可以做的功能之后alert(abc),它会发出警报def,这不好。

如何将变量的范围设置为函数?

javascript scope

5
推荐指数
1
解决办法
1048
查看次数

标签 统计

javascript ×5

closures ×2

scope ×2

function ×1

local ×1

variables ×1