认为存在块级作用域(js的问题)

简介: 认为存在块级作用域(js的问题)

JavaScript开发者中常见的混乱来源(也是常见的错误来源)是假设JavaScript为每个代码块创建一个新的作用域。尽管这在许多其他语言中是对的,但在JavaScript中却不是。考虑一下下面的代码:

for (var i = 0; i < 10; i++) {
    /* ... */
}
console.log(i);  // 输出什么?(

如果你猜测console.log()的调用会输出 undefined 或者抛出一个错误,那你就猜错了。答案是输出10。为什么呢?


在大多数其他语言中,上面的代码会导致一个错误,因为变量i的 "生命"(即使作用域)会被限制在for块中。但在JavaScript中,情况并非如此,即使在for循环完成后,变量i仍然在作用域内,在退出循环后仍保留其最后的值。(顺便说一下,这种行为被称为变量提升(variable hoisting)。


JavaScript中对块级作用域的支持是通过let关键字实现的。Let关键字已经被浏览器和Node.js等后端JavaScript引擎广泛支持了多年。


相关文章
|
6月前
|
存储 缓存 JavaScript
|
6月前
|
JavaScript
闭包(js的问题)
闭包(js的问题)
32 0
|
18天前
|
缓存 JavaScript 前端开发
js 闭包
【10月更文挑战第27天】JavaScript闭包是一种强大的特性,它可以用于实现数据隐藏、记忆和缓存等功能,但在使用时也需要注意内存泄漏和变量共享等问题,以确保代码的质量和性能。
34 7
|
3月前
|
JavaScript 前端开发 安全
JS 闭包(1)
JS 闭包(1)
29 0
|
3月前
|
JavaScript Java
JS 闭包
JS 闭包
27 0
|
4月前
|
存储 缓存 JavaScript
js 【详解】闭包
js 【详解】闭包
33 0
|
4月前
|
JavaScript
JS 【详解】作用域
JS 【详解】作用域
20 0
|
5月前
|
JavaScript
JS 块级作用域、变量提升
JS 块级作用域、变量提升
|
6月前
|
自然语言处理 JavaScript 前端开发
说说js的闭包
当谈到JavaScript中的闭包时,它是一个非常重要的概念
29 0
js-闭包
闭包就是函数嵌套函数,目的是为了访问一个函数中的局部变量,让这个局部变量可以全局访问,即使这个变量所在的函数被释放之后,依然可以访问。