【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

回到顶部