gpt4 book ai didi

javascript - 我可以在javascript中使用大括号来分隔代码段吗

转载 作者:数据小太阳 更新时间:2023-10-29 05:01:19 25 4
gpt4 key购买 nike

这是一些示例代码。我想知道是否有任何理由不应该这样做。

//some code
var x = "hello";

{
var y = "nice";

function myfunction() {
//do stuff . . .
}
}

我看到这样做的好处是能够以 block 的形式组织代码段,并让自动格式化程序做一些工作......

在我的测试中,{} 在创建 var 或函数时不会影响作用域。

最佳答案

这个答案是在早期 JavaScript 实现的时候写的。虽然适用于 var 的相同规则,ECMAScript 2015 (aka ES6)介绍let variable declaration statement, which follows "traditional" block-scoped rules .

let 使用 block 的范围限定示例,记录“1”、“2”、“1”:

{ let x = 1; console.log(x); { let x = 2; console.log(x) }; console.log(x) }

MDN Reference on Block将 block 的用法总结为:

Important: JavaScript does not have block scope. Variables introduced with a block are scoped to the containing function or script, and the effects of setting them persist beyond the block itself. In other words, block statements do not introduce a scope. Although "standalone" blocks are valid syntax, you do not want to use standalone blocks in JavaScript, because they don't do what you think they do, if you think they do anything like such blocks in C or Java.


正如 MDN 上所讨论的,语法是完全有效的,因为 { StatementList }(又名 Block )是一个有效的 Statement 生产..

但是; 因为这很重要:a new block does not introduce a new scope . 只有 函数体引入了新的作用域。在这种情况下, xy 变量具有相同的作用域。

另外一个FunctionDeclaration should appear only as a top-level statement - 也就是说,它必须是直接在 Program 或 Function 主体下的语句,而不是 Block。在这种情况下,myfunction 的声明是 "not reliably portable among implementations" .

IIFE (Immediately Invoked Function Expression)可以使用的模式,虽然它解决了上述技术问题,但我不会在这里推荐它,因为它会使代码复杂化。相反, 会简单地创建更多命名函数(命名函数可以嵌套!),可能在不同的模块或对象中,视情况而定。

var x = "hello";

;(function () {
// New function, new scope
// "y" is created in scope, "x" is accessible through the scope chain
var y = "nice";

// Now VALID because FunctionDeclaration is top-level of Function
function myfunction() {
}
})(); // Invoke immediately

// No "y" here - not in scope anymore

关于javascript - 我可以在javascript中使用大括号来分隔代码段吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574403/

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