能否在JavaScript/TypeScript定义变量/常量时创建局部作用域?
在JavaScript/TypeScript中无需Lambda实现局部作用域绑定的方案
你可以通过以下几种方式实现类似F#的局部作用域绑定效果,不用依赖立即执行函数表达式(IIFE):
1. 块级作用域配合变量赋值
利用ES6引入的块级作用域({}包裹的范围),结合let/const的作用域特性,先在外部声明变量,再在块内完成计算并赋值:
let myValue; { // 这个变量仅在当前块内可见 const internalValue = 1; myValue = internalValue + 5; } // 外部无法访问internalValue,myValue的值为6
这种方式完全符合标准ES语法,兼容性好,所有支持ES6的环境都能运行。
2. Do表达式(提案阶段,部分环境支持)
如果你的运行环境支持ES提案中的Do表达式(比如TypeScript开启对应配置、Babel转译,或最新Chrome等浏览器),可以写出和F#风格几乎一致的代码:
const myValue = do { const internalValue = 1; internalValue + 5; };
Do表达式会将块内最后一个表达式的结果作为整个表达式的值返回,直接赋值给外部变量,同时块内的局部变量不会泄漏到外部作用域。
需要注意的是,Do表达式目前还不是ECMAScript的正式标准,使用前要确认环境支持情况。
内容的提问来源于stack exchange,提问作者LA.27
相关产品推荐
相关产品推荐

