1.系统自带函数
-
parseInt():转换成整型类型,如果参数是小数,则会省去小数位内容,没有四舍五入。如果参数以数字开头,但是包含了字符,则取最左边的所有数字;如果参数不是以数字开头的,则结果是:NaN,表示非数值类型。
-
parseFloat():转换成非整型类型,如果参数以数字开头,但是包含了字符,则取最左边的所有数字;如果参数不是以数字开头的,则结果是:NaN,表示非数值类型。
-
isNaN(): 判断是不是非数值(和参数的数据类型无关),如果参数是数值,则返回 false,反之则返回 true
2.自定义函数.
2.1函数的分类.
-
有返回值:方法体内通过 return关键字返回返回值,可用变量接收返回值。
-
无返回值:方法体内没有 return关键字,如果用变量接收返回值,接收的是 undefined。
-
匿名函数:没有名字的函数。
-
回调函数:你定义的,你没有调用,但最终它执行了(在某个时刻或某个条件下)。
-
自调函数:函数定义完,立即调用执行(一般用于该函数只使用一次的情况下)。
2.1.1函数声明方式(函数语句).
function 函数名(参数1,参数2){
函数体 }
-
注,参数不用加数据类型,直接写参数名即可。
.2.2函数表达式方式 (function expression).
-
不以 function 关键字开头的函数语句就是函数表达式定义。
-
带有名字方式。
var 变量名= function 函数名(参数1,参数2){
函数体
}
调用:变量名(参数1,参数2);
注,该方式就是把一个函赋给了一个变量,所以调用函数的时候就是调用变量,与函数名无关.
-
匿名方式:使用函数表达式的时候可以省略函数名,此时就是匿名函数。
let 变量量名= function(参数1,参数2){
函数体
}
调用:变量名(参数1,参数2);
-
IIFE方式:IIFE是在函数声明后立即调用的函数表达式。当函数只使用一次时,通常使用IIFE (Immediately Invokable Function Expressions:立即可调用函数表达式)。
(function(参数) {
函数体
})(参数);
注1:使用该方式的时候,小括号前面的语句必须以分号结尾。
注2:好处,不会污染外部(一般指全局)的命名空间。
-
箭头函数方式。
const fun = ()=> {console.log('箭头函数')}
注1:带一个参数可省略小括号,方法体只有一个表达式可以省略花括号。如:let fun = a => console.log(a);
注2:有返回值的函数,直接在方法体写返回内容即可,不用写 return。如:let fun = a => a+1.
注3:箭头函数里面this的指向会改变。箭头函数的this指向的是父级程序的this指向,如果没有父级程序 或者 父级程序没有指向 箭头函数的this指向是window。
-
注1,函数表达式用 let和 var声明的效果一样,都不存在函数提升问题。
-
注2,函数表达式也可以用 const声明,此时该函数就不能重新定义了。如:const fa = (参数){函数体}; fa=(参数){函数体}; 该写法错误。而 var和 let声明的函数则可以重新定义。
2.3回调函数-附加.
-
你定义的,你没有调用,但最终它执行了(在某个时刻或某个条件下)。
-
当函数A被当做参数传给了函数B,并由函数B执行函数A的时候,函数A就成了一个回调函数,如果函数A是没有名字的函数,那么函数A就是匿名回调函数。
-
常见的回调函数:
-
dom事件回调函数 ==>发生事件的dom元素;
-
定时器回调函数 ===>window;
-
ajax请求回调函数;
-
生命周期回调函数。
-
// dom事件回调函数
document.getElementById('btn').onclick = function () {
alert(this.innerHTML);
}
// 定时器回调函数
setTimeout(
function(){alert('到点了'+this)},2000
)
2.4函数的调用方式.
-
直接调用:test();
-
通过对象名调用:对象名.test()
-
通过new调用:new test();
-
临时让方法成为其它对象的方法进行调用:test.call/apply(对象名)-附加;
3.全局变量和局部变量.
-
全局变量和局部变量的概念和Java里面一样:
-
在函数内部声明的变量,不管是通过var还是let声明的,都是局部变量,只能在本方法内部使用。
-
如果在代码块{} 里面声明变量,通过var方式声明的,则还是全局变量;如果通过 let声明的,则是局部变量。
-
4.this在函数里面的指向-了解.
-
this是每一个函数都一定有的关键词,它的值是调用函数的当前对象。如果调用函数的时候没有直接指定对象,那么this就代表 window对象。比如:声明式函数、自调函数、匿名函数、for循环、计时器、延时器等。箭头函数里面的this指向的是当前的父级程序的this指向,如果没有父级程序 或者 父级程序没有指向 箭头函数的this指向是window对象。也可以通过 call()和apply()函数改变this的指向。
4.1this指向window对象.
1.自调函数/匿名函数:
(function(){alert(this)})()
2.声明式函数:
function fa(){
alert(this);
}
3.for循环:
for (var i = 0; i < 2; i++) {
console.log(this);
}
4.延时器:setTimeout(alert(this),1);
5.计时器:setInterval(alert(this),1);
4.2this指定函数的当前调用对象.
4.3this指向当前父级程序的this指向.
-
在箭头函数里面 this指向的是当前父级程序的this,如果没有父级程序 或者 父级程序没有指向,那么箭头函数的this指向是window对象。但是当当前箭头函数的父级程序是对象,对象是没有this的,箭头函数this指向的还是window。
4.4改变this的指向.
4.4.1call函数方式.
-
call函数的第一个参数就是改变后的this执行,参数二及后面的参数是给原始函数传的参数。
4.4.2apply函数方式.
-
注,使用apply函数方式的时候,给原始函数传参要以数组形式传。
5.对象-{}.
6.数组-[].
6.1定义数组.
-
number类型数组:let array = [1,4,5,2,6,8,7];
-
string类型数组:let array = ['a','b','c','d','e','f'];
-
对象数组:
6.2获取数组长度.
-
获取数组的长度:let l = array.length;
6.3数组取值.
-
通过下标获取数组里面的元素:let a = array[0];
-
遍历数组:
-
通过for循环,方式1:for(let i = 0;i<array.length;i++) console.log(array[i]);
-
通过for循环,方式2:for(i in array) console.log(array[i]);
-
通过foreach循环array.forEach(a => console.log(a));
-