javascript函数的多种用法:

2018-12-13  本文已影响0人  _Jian__

2018-08-05

一,javascript 代码运行分为两个阶段:

 1、预解析  --- 把所有的函数定义提前,所有的变量声明提前,变量的赋值不提前

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

 function fn(){console.log(1111);}

 var abc;  var fn1;

//下列两个函数,第一个会执行,第二个不会执行,就是因为javascript的预解析机制

 fn();

 function fn(){console.log(1111);}

fn1();

 var fn1 = function(){  console.log(1111);  };

 var abc = '123';

二,参数函数:函数的参数可以是一个函数,这个函数可以直接调用

var obj = {

name:"zhangsan",

say:function(){console.log("hello");}

};

var cb = function(){console.log(123);}

function fn2(callback){callback();}

fn2(obj.say);

三,闭包:函数可以作为返回值,函数的嵌套形成闭包

function fn4(){

var n = 1;

var fn = function(){n ++;console.log(n);}

return fn;

}

//这里的fn5就是里面的fn,闭包的特点就是

var fn5 = fn4();

fn5();  fn5();  fn5();

//输出的结果为2,3,4,说明n的值没有被销毁,而是保留下来,另外一点:function内是一个函数空间,函数外不能够访问,闭包就可以让我们访问函数内的数据。

例子:

var i=0;var data = [];

for(i=0;i<3;i++){

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

}  

data[0](); data[1](); data[2]();

//输出的值都是3,由于没有for里面没有块作用域,定义的i和外面的i是一样的,赋值后data里面为三个函数,i为3,故输出全为3,要想输出0,1,2,就要运用 到闭包的知识

var i=3;

var data = [];

for(i=0;i<3;i++){

data[i] = (function(k){

return function(){console.log(k);}

})(i);

}//( function(){}) ()是一个立刻执行函数,里面用到闭包,就可以存储值

data[0]();data[1]();data[2]();

上一篇 下一篇

猜你喜欢

热点阅读