JavaScript基础(三)函数介绍
基本介绍
- 类似于Java中的方法,目的是为了减少代码量和方便重复调用。
- funName(); 是调用的函数方法
- new FunName();是调用的构造方法。
- 对于函数有两种写法
- 声明:function nameF()
- 表达式: var nameF = function
JS函数的参数
JavaScript是弱类型语言,一定要对参数进行判断。
<script type="text/javascript"> //对于参数来说进行判断,一般是空(undefined,null,0,空字符串,NaN) //因为js中任何类型都可以转换成boolean类型,所以利用这个特性 //通过 if(!param) 语句可以过滤掉大部分参数, //更简单的是 对于数字 var num = num || 0; //对于字符串 var str = str || ''; //对于数组 var arr = arr || []; //对于函数等,只好用typeof来判断,例如: //if(typeof('afterClose')='function') function f1(a,b){ return a+b; } console.log(f1(1,2));//输出3 console.log(f1(1));//输出NaN,因为调用时形参b的值为undefined,无法进行计算 </script>
JS函数没有重载
<script type="text/javascript"> function sum(a,b){ return a+b; } function sum(a,b,c){ return a+b+c; } console.log(sum(1,2));//输出NaN //js类似css,会覆盖,调用最后解析的函数,所以js里面不允许有重名的函数 //另外JS中的调用函数时参数可以随意写,不做限制,输出结果只跟函数体有关 console.log(sum(1,2,3,4));//6 </script>
变量/参数
<script type="text/javascript"> // 形参不影响实参的值 // 不使用var声明的变量是全局变量,但是不推荐使用 // 全局作用域只有一个,在script标签下就是全局, // 一个函数就是局部定义 var a = 20; var b = 30; function sum(a,b){ var a = 10; return a+b; } console.log(sum(a,b));//40 console.log(a);//20 </script>
浏览器解析js顺序
- 先进行预解析(找var function,param)
- 再进行从上到下,一行一行解析、
例1:
//例如: var num = 20; fun(); function fun(){ console.log(num);//undefined var num = 10; } //其实编译后,是这样的 /** //全局 //第一次预解析 var num; function fun(){ console.log(num); var num = 10; } num=10; fun(); //第二次预解析 var num; function fun(){ //局部 var num; console.log(num);//输出undefined num = 20; } num=10; fun(); */
例2:
demo(); console.log(c); console.log(b); console.log(a); function demo(){ var a = b = c = 10; console.log(a); console.log(b); console.log(c); }
结果如下,仔细看一下:
//编译后变化 functoin demo(){ var a; a = b = c =10;//不使用var声明的是全局变量,a是局部变量,b和c是全局变量 console.log(a);//10 console.log(b);//10 console.log(c);//10 } demo(); console.log(c);//10 console.log(b);//10 console.log(a);//a is not defined
改变就是好事.