js基础--执行顺序

    xiaoxiao2021-03-25  105

    今天本来在看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

    转载请注明原文地址: https://ju.6miu.com/read-25039.html

    最新回复(0)