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]
例如:
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代码运行分两个阶段:预解析,执行
- 奇酷的JavaScript代码(可直接在浏览器地址栏运行)
- [原] 用 javascript 给你的博客增加运行代码功能
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)
- 单击服务器控件button时不运行服务器端代码,只运行javascript代码
- javascript 运行代码的代码 By Stabx
- 数据库应用系统的开发具体分为哪几个阶段
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- 使一个函数作为另外一个函数的参数来运行的javascript代码
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript写作技巧,函数A中调用函数B, 怎样在函数B中写代码中断函数A的运行?
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- [导入]JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载]
- 数据库应用系统的开发具体分为哪几个阶段