如果我有这段代码(它使用析构),它似乎是在创建新变量ss和pp。
但它们的范围是什么呢?它们是作为var还是作为let变量创建的?
它们是功能范围还是块作用域?
let config = {
server: 'localhost',
port: '8080',
timeout: 900,
};
/* no let or var here */ ({server : ss, port : pp} = config);
console.log(ss, pp);
我的问题与建议的问题并不重复。我知道var的事,如果你省略它会发生什么。我在这里寻找的真正答案就是巴玛尔提供的答案。我只是不确定析构赋值的行为是否与普通赋值完全相同,或者在下它假定var (函数)或let (块)作用域。就这样。解构是在JS提出另一个问题很多年后才提出的。因此,假设析构赋值可能具有与通常赋值不同的语义,这是合乎逻辑的。正如巴玛尔所证实的,事实并非如此,所以我已经准备好了。
发布于 2019-11-14 00:45:09
它们是全局变量,就像在正常任务中一样。您的代码只是以下几个方面的缩写:
ss = config.server;
pp = config.port;发布于 2019-11-14 00:46:21
它们是全球性的。您甚至可以通过稍微修改示例来证明这一点。console.log语句都在下面的代码段中工作。如果是块作用域,两种方法都会失败,第一种会通过,而第二种则会失败,如果它是函数作用域的话,但显然两者都能工作。
(function() {
{
let config = {
server: 'localhost',
port: '8080',
timeout: 900,
};
({server : ss, port : pp} = config);
}
console.log(ss, pp);
})();
console.log(ss, pp);
发布于 2019-11-14 00:45:18
它们将是全局变量。未声明的变量的任何赋值都是全局的。
https://stackoverflow.com/questions/58847727
复制相似问题