javascript2--函数和Windows对象

1.系统自带函数

  • parseInt():转换成整型类型,如果参数是小数,则会省去小数位内容,没有四舍五入。如果参数以数字开头,但是包含了字符,则取最左边的所有数字;如果参数不是以数字开头的,则结果是:NaN,表示非数值类型。

  • parseFloat():转换成非整型类型,如果参数以数字开头,但是包含了字符,则取最左边的所有数字;如果参数不是以数字开头的,则结果是:NaN,表示非数值类型。

  • isNaN(): 判断是不是非数值(和参数的数据类型无关),如果参数是数值,则返回 false,反之则返回 true

2.自定义函数.

2.1函数的分类.

  1. 有返回值:方法体内通过 return关键字返回返回值,可用变量接收返回值。

  2. 无返回值:方法体内没有 return关键字,如果用变量接收返回值,接收的是 undefined

  3. 匿名函数:没有名字的函数。

  4. 回调函数:你定义的,你没有调用,但最终它执行了(在某个时刻或某个条件下)。

  5. 自调函数:函数定义完,立即调用执行(一般用于该函数只使用一次的情况下)

2.1.1函数声明方式(函数语句).

function 函数名(参数1,参数2){  

  函数体 }

  • 注,参数不用加数据类型,直接写参数名即可。

.2.2函数表达式方式 (function expression).

  • 不以 function 关键字开头的函数语句就是函数表达式定义。

  1. 带有名字方式。

var 变量名= function 函数名(参数1,参数2){

函数体

}

调用:变量名(参数1,参数2);

注,该方式就是把一个函赋给了一个变量,所以调用函数的时候就是调用变量,与函数名无关.

  1. 匿名方式:使用函数表达式的时候可以省略函数名,此时就是匿名函数。

let 变量量名= function(参数1,参数2){

函数体

}

调用:变量名(参数1,参数2);

  1. IIFE方式:IIFE是在函数声明后立即调用的函数表达式。当函数只使用一次时,通常使用IIFE (Immediately Invokable Function Expressions:立即可调用函数表达式)

(function(参数) {

    函数体

})(参数);

注1:使用该方式的时候,小括号前面的语句必须以分号结尾。

注2:好处,不会污染外部(一般指全局)的命名空间。

  1. 箭头函数方式

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,函数表达式用 letvar声明的效果一样,都不存在函数提升问题。

  • 注2,函数表达式也可以用 const声明,此时该函数就不能重新定义了。如:const fa = (参数){函数体};   fa=(参数){函数体};  该写法错误。而 varlet声明的函数则可以重新定义。

2.3回调函数-附加.

  • 你定义的,你没有调用,但最终它执行了(在某个时刻或某个条件下)。

  • 当函数A被当做参数传给了函数B,并由函数B执行函数A的时候,函数A就成了一个回调函数,如果函数A是没有名字的函数,那么函数A就是匿名回调函数。

  • 常见的回调函数:

    1. dom事件回调函数 ==>发生事件的dom元素;

    2. 定时器回调函数 ===>window;

    3. ajax请求回调函数;

    4. 生命周期回调函数。

// dom事件回调函数

document.getElementById('btn').onclick = function () {

  alert(this.innerHTML);

}

// 定时器回调函数

setTimeout(

  function(){alert('到点了'+this)},2000

)

2.4函数的调用方式.

  1. 直接调用:test();

  2. 通过对象名调用:对象名.test()

  3. 通过new调用:new test();

  4. 临时让方法成为其它对象的方法进行调用:test.call/apply(对象名)-附加;

3.全局变量和局部变量.

  • 全局变量和局部变量的概念和Java里面一样:

    1. 在函数内部声明的变量,不管是通过var还是let声明的,都是局部变量,只能在本方法内部使用。

    2. 如果在代码块{} 里面声明变量,通过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数组取值.

  1. 通过下标获取数组里面的元素:let a = array[0];

  2. 遍历数组:

    1. 通过for循环,方式1:for(let i = 0;i<array.length;i++) console.log(array[i]);

    2. 通过for循环,方式2:for(i in array) console.log(array[i]);

    3. 通过foreach循环array.forEach(a => console.log(a));


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值