Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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_Scope - Fatal编程技术网

JavaScript:将函数本地范围引用为对象

JavaScript:将函数本地范围引用为对象,javascript,scope,Javascript,Scope,调用函数时,会为该调用建立一个局部作用域。有没有办法直接将该范围作为对象引用?就像window是全局范围对象的引用一样 例如: function test(foo){ var bar=1 //Now, can I access the object containing foo, bar, arguments and anything //else within the local scope like this: magicIdentifier.bar } 或

调用函数时,会为该调用建立一个局部作用域。有没有办法直接将该范围作为对象引用?就像window是全局范围对象的引用一样

例如:

function test(foo){
    var bar=1
    //Now, can I access the object containing foo, bar, arguments and anything
    //else within the local scope like this:
    magicIdentifier.bar
}
或者,是否有人在自定义变量之上有一个完整的本地范围列表

背景:我正在尝试一种从函数调用中完全转移到全局范围的方法,with语句是一个笑话,调用工作得稍微好一点,但对于函数范围中声明但不在全局范围内的任何内容,它仍然会中断,因此我将在全局范围内声明这几种情况,但这需要我知道它们是什么。IE函数execScript进行了彻底的转换,但这只解决了IE的问题


注意:对于任何动态加载JavaScript的人来说,
setTimeout(code,1)
是一种实现全局范围的简单有效的方法,但它不会立即执行。

某些版本的Netscape在
参数中有一个神奇的属性,它实现了您所寻找的功能。(我不记得它被调用了什么)

不,无法引用执行上下文的变量环境的函数绑定对象的执行上下文的变量对象(这就是它被称为[现在;因此删除线];详细信息见)。您只能使用
参数访问它的有限视图(这确实非常有限)


通常,当我想这样做的时候,我只是把我想要的一切都放在一个对象上,然后使用它(例如,将它传递到一个函数中)。当然,在上下文中创建的任何函数都可以访问创建它们的范围内的所有内容,因为它们“关闭”了上下文;更多信息:。

您不需要关键字来引用本地作用域中的变量,因为它是您所在的作用域。

类似的内容怎么样

<script type="text/javascript">
    var test =  {
        bar : 1,
        foo : function () {
            alert(this.bar);
        }
    }

    test.foo();
</script>

var测试={
酒吧:1,
foo:function(){
警报(此.bar);
}
}
test.foo();

我知道这已经非常晚了,您可能已经不再有丝毫兴趣了,但我也对这一点的可行性感兴趣,您应该能够使用以下方法进行某种变通:

(功能(全局){
var-testVar=1;
global.scope=函数{
返回评估;
}
})(本条);
然后运行:

scope('testVar'); // 1
从闭包中返回变量。不是特别好,但理论上可以将其包装到对象中,如果需要,可以使用一些验证、getter和setter


编辑:重读问题后,我假设您希望访问它,而不必在作用域本身中指定函数,因此这可能不适用。不管怎样,我还是把它留在这里。

如果您需要访问函数中包含
foo
参数的对象,为什么不直接将此对象作为参数传递?@aaaaaaaaaa您找到过可行的解决方案吗?我很感兴趣,尤其是一个不使用
eval()。在某些版本的Netscape中,它有一个特殊的proeprity,指的是变量作用域。@nickf:我一开始也误读了它,但知道SLaks后,我又重新阅读了一遍,明白了他的意思。:-)有趣,但我担心“某些版本的Netscape”中提供的功能在现代web开发中无法实现;-)它可能仍然存在于Firefox中。然而,你是对的;这实际上对您没有帮助。是否迭代当前范围中存在的每个变量?对我来说,这听起来不像Javascriptic(或者“Pythonic”这个词的Javascript类似物),没有引用局部变量的对象听起来不像Javascriptic。我不需要它,但我希望它存在,JavaScript似乎几乎所有东西都有对象,而且都是关于对象的。@Rolf我必须恭敬地表示不同意。对我来说,这感觉不太好。这样的物体也是不必要的。当你真的,真的需要动态地访问一个变量时——你真的,真的确定你不应该使用一个
{}
(一个专用对象)——总是有
eval
可以求助。哇,那些规范真的很难阅读。在任何情况下,据我所知,它们似乎表明,除了参数和定义的局部变量之外,唯一的局部变量是参数和长度。那会让我动起来的,谢谢。我正在构建一个库,我正在创建的第一个函数是setInterval的一致版本,这就是它的用途。当您提供了如此闪亮的抽象化界面时,一切似乎变得更加复杂了。@eBusiness:是的,是的,确实如此。:-)不要忘记在函数中声明的任何命名函数,它们也是范围内的符号。如果我的目标只是编写奇怪的代码,那将是一个很好的解决方案:-)Lol。我不认为这有多奇怪,因为你只创建了一个简单的类结构。我认为这太棒了!