js基础--执行顺序

今天本来在看es6,let

但是给的例子,我有些迷惑

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
以前看闭包的例子就不太懂,今天要好好研究一下!

资料说 i共享,所以就都是10 

为什么????

然后追根溯源是我连js的执行顺序都没搞懂。。。

这个太不应该了


之前以为顺序嘛,就和c++ 、java一样,有什么呢?

但是!大有不同!


先说函数定义,老生常谈,有两种定义:

//“定义式”函数定义 
function Fn1(){ 
alert("Hello World!"); 

//“赋值式”函数定义 
var Fn2 = function(){ 
alert("Hello wild!"); 

大家都知道,但是怎么预编译的你知道吗?

页面加载过程中,浏览器会对页面上或载入的每个js代码块(或文件)进行扫描,如果遇到定义式函数,则进行预处理(类似于C等的编译),处理完成之后再开始由上至下执行;遇到赋值式函数,则只是将函数赋给一个变量,不进行预处理(类似1中变量必须先定义后引用的原则),待调用到的时候才进行处理。


我看了这几篇博客之后恍然大悟

http://www.jb51.net/article/36755.htm

http://www.jb51.net/article/44123.htm

里面说的十分详细,我就不赘述了


要注意

1.同名定义式函数定义,预编译时会覆盖!

2.赋值式函数定义是动态的,不会预处理

3.注意作用域,是一块一块的函数作用域

4.函数会提升,变量不会,所以很多都是undefined



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值