首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用未声明的变量进行析构--它们的作用域是什么?

问使用未声明的变量进行析构--它们的作用域是什么?
EN

Stack Overflow用户
提问于 2019-11-14 00:38:32
回答 3查看 84关注 0票数 2

如果我有这段代码(它使用析构),它似乎是在创建新变量ss和pp。

但它们的范围是什么呢?它们是作为var还是作为let变量创建的?

它们是功能范围还是块作用域?

​

代码语言:javascript
复制
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提出另一个问题很多年后才提出的。因此,假设析构赋值可能具有与通常赋值不同的语义,这是合乎逻辑的。正如巴玛尔所证实的,事实并非如此,所以我已经准备好了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-14 00:45:09

它们是全局变量,就像在正常任务中一样。您的代码只是以下几个方面的缩写:

代码语言:javascript
复制
ss = config.server;
pp = config.port;
票数 3
EN

Stack Overflow用户

发布于 2019-11-14 00:46:21

它们是全球性的。您甚至可以通过稍微修改示例来证明这一点。console.log语句都在下面的代码段中工作。如果是块作用域,两种方法都会失败,第一种会通过,而第二种则会失败,如果它是函数作用域的话,但显然两者都能工作。

​

代码语言:javascript
复制
(function() {
  {
    let config = {
        server: 'localhost',
        port: '8080',
        timeout: 900,
    };
    ({server : ss, port : pp} = config); 
  }

  console.log(ss, pp);
})();

console.log(ss, pp);

​

票数 2
EN

Stack Overflow用户

发布于 2019-11-14 00:45:18

它们将是全局变量。未声明的变量的任何赋值都是全局的。

来源:https://www.w3schools.com/js/js_scope.asp

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58847727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档