javascript解析

来源:互联网 发布:希尔伯特变换 c语言 编辑:程序博客网 时间:2024/06/05 11:48
  • 作用域
var a = [];for (var i = 0; i < 10; i++) {  var c = i;  a[i] = function () {    console.log(c);  };}a[6](); // 9
var a = [];for (var i = 0; i < 10; i++) {  let c = i;  a[i] = function () {    console.log(c);  };}a[6](); // 6

使用let方法实际上是把代码改为:

var a = [];for (var i = 0; i < 10; i++)    (function(c) {        a[i] = function() {            console.log(c);        };    }(i));a[6]();

首先看a[i]这个函数

a[i] = function () {    console.log(c);  };

本质上是输出变量c的值,那么变量c的本质就很重要。变量c的本质是什么呢?
用var 时,变量c的作用域是函数,在这里为全局变量,for语句执行完后,c在全局为9,所以a[6] = console.log(c),为9;用let时,变量c的作用域为块(跟c,java一样)
在这里作用域只是在for语句里面,相当于每次循环都给console.log(c)指定了一个值,所以a[6] = console.log(6),为6。

原创粉丝点击