定义函数的方式 1、函数声明
2、函数表达式
把一个函数给一个变量,此时形成了函数表达式 var 变量=匿名函数
定义函数实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 function f1 ( ){console .log ('hello' );} f1 ();console .log (f1);var f1=function ( ){console .log ('hello' );} f1 ();function f1 ( ){console .log ('hello' );} f1 ();function f1 ( ){console .log ('hello world' );} f1 ();var f2=function ( ){console .log ("hi" );} f2 ();var f2=function ( ){console .log ("hello" );} f2 ();
函数自调用 1 2 3 4 5 6 7 8 function 函数名(){ } 函数名(); (function ( ){ })();
函数自调用实例:
1 2 3 4 5 6 7 (function ( ){ console .log ('hahahahaha' );})(); (function ( ){ console .log ('yayayayaya' );})();
函数的数据类型 1 2 3 4 5 6 function f1 ( ){ console .log ("我是函数" ); } console .log (typeof f1);
查看函数数据类型实例:
1 2 3 4 5 function f3 ( ){console .log ('你好' );} console .log (typeof f3);
回调函数 函数A作为参数传递到另一个函数B中,并且这个函数B执行函数A,就说函数A叫做回调函数
回调函数实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 function f4 (x,y ){console .log (x+y);} f4 (10 ,20 );function f5 (x,y ){console .log (x+y);} f5 ('hello' ,'你好' );function f6 (x ){console .log (x);} f6 (true );function f7 (fn ){fn ();} function f8 ( ){console .log ('我是回调函数' );} f7 (f8);function fa ( ){console .log ('被调用' ;)return function ( ){console .log ('这是函数' );} } var ff=fa ();ff ();
作用域 作用域实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 { var num=10 ;console .log (num);} console .log (num);if (true ){var num=20 ;} console .log (num);for (i=0 ;i< 5 ;i++){var num=30 ;} console .log (num);function f9 ( ){var num=56 ;} f9 ();console .log (num);
隐式全局变量 隐式全局变量实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 num=1 ; console .log (num);function fb ( ){num=100 ; } fb ();console .log (num);console .log (num);var a=1 ;a2=2 ; delete a1;delete a2;console .log (typeof a1);console .log (typeof a2);
作用域链 作用域链实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var num=100 ;function fc ( ){var num=20 ;function fd ( ){var num=30 ;function fe ( ){var num=50 ;console .log (num);} fe ();} fd ();} fc ();
作用域链:沿着作用域链一级一级的搜索的过程,搜索过程始终从作用域链底端开始,然后逐级向上回溯,直到找到为止(如果找不到,通常会报错)。
预解析 预解析实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 var num;console .log (num);var num=10 ;fg ();var num=20 ;function fg ( ){var num;console .log (num);var num=100 ;}