Javascript 是否有一种方法可以将变量添加到作用域中,其方式与将变量添加到窗口对象中的方式类似?
只是出于好奇: 在web浏览器的上下文中,可以向窗口对象添加属性,从而使其成为全局对象,例如: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
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没有提供显式访问本地作用域的方法(当然除了直接变量引用).谢谢你指出这一点!我按照你的建议添加了电话。谢谢你指出这一点!我按照你的建议加了电话。