JS自学笔记03
1、函数练习:
如果函数所需参数为数组,在声明和定义时按照普通变量名书写参数列表,在编写函数体内容时体现其为一个数组即可,再传参时可以直接将具体的数组传进去 即var max=getArratMax([1,4,2,6,8,2,5]);
关于说明:
/***函数的说明*@param array参数为一数组//解释说明参数列表*returns //解释说明返回值**/当有人需要查看该函数的说明时,使用ctrl+左键点击函数名即可访问以上注释
//输入年月日,获取这个日期是这一年的多少天function getDates(years,month,day){ var days=day;if(month==1){return days;}var months=[31,28,31,30,31,30,31,31,30,31,30,31];}for(var i=0;i2){days++;}return days;
2、arguments对象
定义一个函数,若不确定用户是否传入了多少参数,此时若知道了参数的个数,就可继续进行运算 arguments.length可获取当前参数列表的参数个数 只使用arguments对象可以查看当前所传参数 3、函数的其他定义方式 1)命名函数:函数具有函数名,函数名存储的是函数代码 匿名函数:函数不具有函数名,不能直接调用 2)函数表达式的定义方式:var 变量名=function(...){ ...};f(...);//调用函数
function f(){ console.log("你好");}console.log(f);//将输出f函数的代码
var f1=function(){ console.log("你好");}f1();//你好f1=function(){ console.log("您好");};f1();//您好//根据函数名存储的是函数代码的原理(function(){ console.log("你好")})();函数的自调用,没有名字,声明的同时直接调用一次性的
函数同时也是一数据类型,function型,可作为参数使用
注意,作参数时不需要带括号,被称为回调函数function f1(fn){ fn();}function f2(){ console.log(你好);}f1(f2);
函数也可作为返回值被使用
function f(){ console.log("你好");return function(){ console.log("输出")}}var ff=f();//调用ff();
4、作用域
1)全局变量: 该变量是由var声明的,为全局变量,可以在页面的任何位置使用。如果页面不关闭,该变量将一直占有内存空间不被释放 局部变量:在函数内部的变量是局部变量,外边不可使用。除了函数以外,其他的任何位置定义的变量都是全局变量 块级作用域:{}一对大括号可视为一块,在这对括号内定义的变量只能在该块内使用。js中不存在块级作用域,在块内声明的变量也可以在块外使用,函数除外。 全局作用域:全局变量的使用范围 局部作用域:局部变量的使用范围 隐式全局变量:不使用var声明变量,被称为隐式全局变量,可以被delete关键字删除并释放,全局变量则不能;并且隐式全局变量使用在函数内,外界仍可直接访问该变量。 2)作用域链5、预解析
1)提前解析代码 把变量及函数的声明提前。把变量声明提前到当前所在作用域最上面。把函数声明提前到当前所在作用域最上面。先提升var,再提升functionconsole.log(num);var num=10;//系统预解析该条指令中的声明部分,上述输出语句将输出undefined
f();//输出undefined,就算没有下面10的赋值语句也是undefined,因为都只会把声明提前,然后执行函数var num=20;function f(){ console.log(num);var num=10;}
案例:
function f1(){ console.log(num);var num=10;}f1();//输出undefinedconsole.log(num);//访问不到,报错预解析中,变量的提升,只会在当前的作用域中提升,提升到当前作用域的最上面。函数中的变量只会提升到函数的作用域中的最前面,不会出去预解析会分段。不同对script标签中的重名函数预解析不会发生冲突
var a=25;function abc(){ alert(a);var a=10;}abc();//undefinedconsole.log(a);// 25console.log(a);//输出函数体内容function a(){ console.log('aaaa');}var a=1;console.log(a);//1
var a=b=c=9;//其中a为全局变量,在函数体内定义时只在体内有效。b,c是隐式全局变量,全场有效
f1();//报错var f1=function(){ console.log(a);var a=10;}