Javascript:是为所有变量创建的闭包,还是只为内部函数可能使用的变量创建的闭包
Javascript: Are closures created for all variables, or only for the ones the inner function might use?
var foo = 'outer';
function outer() {
var foo = 'closure';
var bar = 'baz';
return function inner() {
console.log(foo);
}
}
我知道foo
将被关闭,因为inner()
将需要它。
但bar
也会被关闭吗?它在inner()
的范围内,但inner()
没有使用它。
从理论上讲,整个父作用域都是封闭的,包括变量foo
和bar
以及对其父作用域的引用:函数inner
可能需要它。至少它是这样指定的。在实践中,引擎可以自由地优化这一点,并垃圾收集所有未引用的内容 - 例如,V8 就是这样做的。
特定变量本身不会结转。创建闭包时,整个范围将结转。在这种情况下,foo
和bar
以及该作用域中存在的任何变量都将inner
函数中可用。
相关文章:
- 根据发送到javascript中函数的参数创建变量名
- 基于循环创建变量
- 创建变量并将其动态命名为javascript
- 使用For each循环-jquery创建变量
- 如何使用html5和javascript创建变量步骤
- 从另一个函数创建变量到 JavaScript 数组
- 有没有办法在javascript或jquery中创建变量选择器
- 从 JavaScript 中的参数创建变量名称
- 如何在 Javascript 中从数组创建变量数组
- jquery创建变量并使用它来加载 - laravel
- 使用 Javascript 创建变量数组(动态,下拉)
- 创建变量后,对定义的变量是坏的/好的/可选的
- HTML5 Web 存储创建变量
- 如何在 for 循环中创建变量
- 在 JQuery/Javascript 中设置和使用动态创建变量的属性
- 在 JavaScript 循环中创建变量
- 从 javascript 中的另一个变量名称创建变量键
- JavaScript 创建变量并使用循环为它们赋值
- 正确的格式结构创建变量
- JavaScript-如何使用递归创建变量嵌套循环