您的位置:首页 > Web前端 > JavaScript

JavaScript代码运行分为几个阶段

2017-05-10 18:29 309 查看
1.预解析----把所有的函数定义提前,所有的变量声明提前,但是变量的赋值不提前
例如:
var fn1=function(){
   console.log(1111);
}
控制器没有任何反应,因为fn1未定义。

fn1();
var fn1=function(){
   console.log(1111);
}
把fn1()加到前面,控制台输出 fn1 is not a function

var fn1=function(){
   console.log(1111);
}
fn1();
把fn1()加到后面,正常输出 

2.执行---从上到下执行(setTimeout,setInterval,ajax中的回调函数,事件中的函数需要触发执行)

[align=left]
[/align]

例一
// var i=3;

[align=left]// var data = [];[/align]
[align=left]// for(i=0;i<3;i++){[/align]
[align=left]//         data[i] = function(){         数组的每一个值都是一个function[/align]
[align=left]//                     console.log(i);[/align]
[align=left]//         }[/align]
[align=left]// }[/align]

i是全局变量  

[align=left]// data[0]();//3[/align]
[align=left]// data[1]();//3[/align]
[align=left]// data[2]();//3[/align]

以上结果输出的是3个3
例二

[align=left]var i=3;[/align]
[align=left]var data = [];[/align]
[align=left]for(i=0;i<3;i++){[/align]
[align=left]            data[i] = (function(k){[/align]
[align=left]                        return function(){[/align]
[align=left]                                    console.log(k);[/align]
                        } 
            

[align=left]            })(i);i的值传给了k,k的循环是独立的[/align]
[align=left]}[/align]
[align=left]data[0]();//0[/align]
[align=left]data[1]();//1[/align]

data[2]();//2

[align=left]
[/align]
[align=left]例三[/align]

function  JuiceMachine(fruit){

[align=left]            this.fruit = fruit;[/align]
[align=left][/align]
[align=left]            this.produceJuice = function(){[/align]
[align=left]                        console.log(this.fruit + '果汁');[/align]
[align=left]            }[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]JuiceMachine.produceJuice(); [/align]
[align=left]// JuiceMachine.brand = '九阳';[/align]
[align=left]// JuiceMachine.open = function(){[/align]
//         console.log('open');
[align=left]// }[/align]
[align=left]// var apple = new JuiceMachine("苹果");[/align]
[align=left]// apple.produceJuice();[/align]
[align=left]// var brand = apple.brand;[/align]
[align=left]// var orange = new JuiceMachine("橘子");[/align]
[align=left]// orange.produceJuice();[/align]
[align=left]//结论:function有双重身份:[/align]
[align=left]//1、对象[/align]
[align=left]//2、构造函数[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript
相关文章推荐