js深入系列-函数

子程序

一个或者多个语句组成的完成特定任务的相对独立的的一段代码块;
包括:

  • 函数: 有返回值
  • 方法: 在对象中
  • 过程: 没有返回值
    在这里插入图片描述

数学中函数

定义域中每一项元素总会对应一个或者多个值域中的值。

-函数式编程
编程风格符合数学函数;

闭包与let

常见的问题

for(var i =0;i<6;i++){
	setTimeout(() => {
		console.log(i)
	})
}

解析:var 定义的变量是全局的没有局部的定义域,所以输出的i都是同一个i,i= 6时跳出循环,因此属输出6
上面的代码将会输出6个6,如何输出0-5,可修改为下面:

for(let i =0;i<6;i++){
	setTimeout(() => {
		console.log(i)
	})
}

// or

for ( var i = 0; i< 6; i ++){
	!function(){
		setTimeout(() => {
			console.log(i)
		})
	}()
}
// 使用let  或者立即执行函数可以输出 0.1.2.3.4.5

解析:let 定义的变量只在{}内才能访问到,形成了类似以闭包的效果;每次的i都在当前作用于内,不会被其他干扰;

this 的确定

在这里插入图片描述

函数与闭包、this

在这里插入图片描述
解析:

fn ()    =>  fn.call(undefined)    // 此时this指向window,window.length === 当前tab窗口数量 ;因此输出3
arguments[0]()  =>   arguments[0].call(arguments)   => fn.call(arguments)   // 此时this指向arguments  ;arguments.length === 2;因此输出2

tip:
window.length === 默认为当前窗口的窗口数量
第二个是参数的长度

最后关于this

this是call的第一个参数
new 重新设计了this
箭头函数不接受this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值