【Web前端问题】let声明的变量会出现在作用域链的活动对象中吗
一个常见闭包
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
function createFunction() {
var result = new Array;
// for(var i = 0; i < 10; i++) {
// result[i] = function(num) {
// return function() {
// return num;
// }
// }(i)
// }
for(let i = 0; i < 10; i++) {
result[i] = function() {
return i;
}
}
return result;
}
var arr = createFunction();
alert(arr[0]());
alert(arr[1]());
</script>
</body>
</html>
如果是用var声明i,那执行arr[0]()的时候,向上访问作用域链,这时候i=2,所有输出2;
但如果是let声明i,执行arr[0]()的时候,createFunction的活动对象有没有i呢,如果有,它的值是怎么确定的呢?
回答:
首先要搞清楚var 和let的作用域
var的作用域跟for循环同级,let则只在本轮循环有效,每轮重新声明,arr的每个方法都持有不同的i
回答:
let是ES6的声明变量方式,ES6支持块级作用域 如果不理解你可以这么想一个大括号就是一个块比如:
这个是用node在终端弄出的结果!
以上是 【Web前端问题】let声明的变量会出现在作用域链的活动对象中吗 的全部内容, 来源链接: utcz.com/a/141966.html