javascript - ES6 是否引入了一种机制来创建 block 作用域函数语句(而不是表达式)?

标签 javascript ecmascript-6

ES6 是否引入了一种机制来制作 block 作用域函数语句(而不是表达式)?

以下内容在 ES5 中是非法的,我认为在 ES6 中仍然如此?

!function() { 
  'use strict'; 
  { 
    function foo () { 
      console.log('foo!'); 
    }
  } 
  foo(); 
}();

编辑:更正术语。

最佳答案

您的代码在 ES6 中语法有效且“合法”。

但它不会按“预期”工作:即使在 ES6 中,函数也受封闭函数的作用域限制(如果在全局作用域中运行,则不受任何限制)。

您可以使用 block (真正的 block !)范围可见性和 let 来声明它:

function bar() {
  {
    let foo = function() {};
    foo(); // foo is defined
  }

  foo(); // foo is not defined
}

bar();

Demo on babeljs.io

关于javascript - ES6 是否引入了一种机制来创建 block 作用域函数语句(而不是表达式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500720/

相关文章:

javascript - 如何使用 JSON 连接到外部 API?

javascript - Angularjs 使用 ng-show 条件来比较两种不同的日期格式

javascript - 服务端渲染如何使用跨域cookie?

javascript - 在 React 和 HTML 中渲染多个图像

Javascript 闭包函数不返回正确的值

javascript - 浏览器如何知道我的目标是 ES6?

angular - 如何从具有匹配属性的数组中删除对象?

javascript - Websocket 处理不同的数据 - 不同的端点?

javascript - 将动态菜单插入 Electron 菜单栏应用

javascript - 收到错误 "c3"未定义 no-undef