gpt4 book ai didi

javascript - 有没有一种方法可以将变量添加到作用域,就像将变量添加到窗口对象一样?

转载 作者:行者123 更新时间:2023-12-01 01:30:52 24 4
gpt4 key购买 nike

只是出于好奇:

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

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”(就像将它们导出到窗口时一样),但在这种情况下它们是私有(private)的。

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

我知道您可以通过多种方式解决问题,但这样做也许并没有那么实质性的好处。这个问题只是出于好奇。

对这篇文章的更改:正如 kylestephens 所指出的,添加了对函数“a()”的调用。

最佳答案

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

function a(){
let b = "c";
console.log(b);
}
a()
// console.log(b) error -- b not in scope

如果你有一个包含一堆数据的对象,最好将这些数据保留在某种结构中,而不是一堆单独的变量。因此,一般情况下不支持将一堆名称导入到作用域中的想法。在特定情况下,您可以使用解构:

// with array
function scope(importedList){
let [a, b, c] = importedList // a, b, & c are local
console.log(a, b, c)
}

scope([1, 2, 3])

// with object
function objscope(importedObject){
let {a, b, c} = importedObject // a, b, & c are local
console.log(a,b,c)
}

const someObj = {
a: "e",
b: "f",
c: "g"
}

objscope(someObj)

关于javascript - 有没有一种方法可以将变量添加到作用域,就像将变量添加到窗口对象一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com