Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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,只是出于好奇: 在web浏览器的上下文中,可以向窗口对象添加属性,从而使其成为全局对象,例如: function a(){ window.b="c"; } //edit a(); console.log(b); function a(){ scope.b="c"; console.log(b); } //but "b" is not available here. 我想知道是否有可能以类似的方式设置变量,但仅限于当前范围,例如: function a(){ windo

只是出于好奇:

在web浏览器的上下文中,可以向窗口对象添加属性,从而使其成为全局对象,例如:

function a(){
   window.b="c";
}
//edit
a();
console.log(b);
function a(){
   scope.b="c";
   console.log(b);
}
//but "b" is not available here.
我想知道是否有可能以类似的方式设置变量,但仅限于当前范围,例如:

function a(){
   window.b="c";
}
//edit
a();
console.log(b);
function a(){
   scope.b="c";
   console.log(b);
}
//but "b" is not available here.
可能的用例

 var objectOne=new(function(){
    this.a="e";
    this.b="f";
    this.c="g";
 })();
 (function(){
    var importlist=["a","b"];
    var scopehere=scope;
    for(var importitm of importlist){
       scopehere[importitm]=objectOne[importitm];
    }
    console.log(a,b);
 })();
因此,在本例中,可以连续“导入”多个变量,将它们作为变量在对象中进行访问,而不是使用“this”(如将它们导出到窗口时),但在本例中,它们是私有的

特别是,如果您使用的是加载html的脚本,并且希望使脚本属性在作用域中可用。示例:paper.js、three.js。逐个属性访问会有点麻烦,但如果有这样一个“范围”对象,它可以自动完成

我知道你可以在很多方面进行工作,也许这样做并没有太大的好处。这个问题只是出于好奇

该员额的变动:
正如kylestephens指出的那样,添加了对函数“a()”的调用。

这就是作用域的工作原理——您不需要做任何特殊的事情,只需定义一个变量即可。用
let
定义的变量的作用域为其封闭块。那些具有
var
的函数的范围是:

函数a(){
设b=“c”;
控制台日志(b);
}
()

//log(b)错误——b不在作用域中
这就是作用域的工作原理——您不需要做任何特殊的事情,只需定义一个变量即可。用
let
定义的变量的作用域为其封闭块。那些具有
var
的函数的范围是:

函数a(){
设b=“c”;
控制台日志(b);
}
()

//console.log(b)错误--b不在范围内
理论上您可以。但是,在第一个示例中,从未调用a()函数,因此从未在window对象上设置属性“b”

它需要如下所示:

function a(){
  window.b="c";
}
a();
console.log(b);

你是否应该是另一个问题。以这种方式污染全球范围通常被认为是不好的做法。我建议您研究原型继承和作用域,以及如何将其用于您的优势。

理论上您可以。但是,在第一个示例中,从未调用a()函数,因此从未在window对象上设置属性“b”

它需要如下所示:

function a(){
  window.b="c";
}
a();
console.log(b);

你是否应该是另一个问题。以这种方式污染全球范围通常被认为是不好的做法。我建议您研究原型继承和作用域,以及如何利用它们发挥优势。

JavaScript没有提供显式访问本地作用域的方法(当然除了直接变量引用)。JavaScript没有提供显式访问本地作用域的方法(当然除了直接变量引用).谢谢你指出这一点!我按照你的建议添加了电话。谢谢你指出这一点!我按照你的建议加了电话。