JS 函数

1 简单分类


1 function hh(){}   // 函数声明

2 var hh = function (){}   // 函数表达式

3 (function() {})()   // 立即执行函数, 创建了一个独立的作用域

4 () => {}   // ES6 箭头函数

5 {hh() {}}  // 字面量对象增强写法

2 基础使用


1 参数问题

  1 function test(a=1, b=2, c=3) {}   // 调用没传参时, a b c 就等于各自对应的默认参数 1 2 3

  2 function test( {a, b, c} = {}) {}   // 形参为对象的时, 不传参会报错, 所以一般会给一个默认参数对象

  3 function hh({a, b, c}) { console.log(a, b, c) }   
  	hh({a: 1, b: 2, c: 3})   // 1 2 3

  4 function hh( [...arr]) { console.log(arr)}   // 避免行参和实参使用相同的复杂数据地址
	hh([1, 2, 3])   // [1, 2, 3]

  5 function hh(...arr) {console.log(arr)}   // ...运算符的收起作用
    hh(1, 2, 3)   // [1, 2, 3]



2 箭头函数   // 没有实参列表, 内部没有 this 指向

  1 msg => {}   // 一个形参可省略小括号
  
  2 msg => console(msg)   // 一个执行语句省略大括号, 且默认执行 return
  

3 生成器函数


1 🔶 简单描述   // 特点: 生成器函数在执行时能暂停,后面又能从暂停处继续执行

  1 function* 这种声明方式, 会定义一个生成器函数, 它返回一个 Generator 对象

  2 调用生成器函数, 并不会马上执行它里面的语句, 而是返回一个这个生成器的 迭代器(iterator) 对象

  3 当这个迭代器的 next() 方法被首次 (后续) 调用时, 其内的语句会执行到第一个 (后续) 出现 yield 的位置为止



2 🔶 代码范式

	// 1 基础执行规范
	function *test() {
      yield console.log(1)
      yield console.log(2)
    }
	let obj = test()
	obj.next()  // 1
    obj.next()  // 2


3 还有很多很多没弄, 暂时没时间弄了, 用的地方也比较少

4 异步函数 async


1 简单描述: 
  
  1 asyncawait 关键字, 让我们可以更简洁的写出基于 Promise 的异步行为, 从而无需刻意地链式调用 promise

  2 async 用来声明函数是异步的

  3 await 用于等待一个 async 函数的返回值



2 代码范式

  



5 回调函数


6 构造函数


6 数据类型 - 相关方法


1 数字 -> 字符串

  1 var hh = String(num)
  
  2 var hh = num.toFixed(xx)   // 把数字转成字符串; 并保留 xx 位小数
  
  3 num.toString(xx)   //  转为指定 xx 进制的数字字符串; 数字不能直接使用需要依赖变量 num
  
  4 常num + ""    // 隐式转换



2 字符串 -> 数字

  1 var hh = Number(str)  // 传入值: 纯数字字符串, true, false, null, 否则返回 NaN
    
  2 var hh = parseInt(str)   // 把字符串转为数字整数; str 必须是数字开头; 无视小数点后面的数, 无视数字后面的非数
    
  3 var hh = parseFloate(str)   // 把字符串转为数字; 可以取到小数; 不可解析16进制  
    


3 其他类型 -> 布尔值

  1 Boolean(123)   // true

  2 (!!123)   // true



4 其它

  1 isNaN(v)   // 先把变量转为数字类型 -> 再判断是不是 NaN -> 是的话结果 = true
  
  2 typeof x   // 判断变量类型 -> 返回值: number / string / boolean / undefined / object / function
  
  3 console.log( Object.prototype.toString.call( hh ) )    //可区分具体的数据类型
  
  4 arr instanceof Object  //true false  表示判断 arr的整个原型链上, 是否存在 Object.prototype

7 常用 API 方法


1 变量复制方法

  1 浅复制   // 只会复制引用地址, 不是一个新对象
    let a = b   

  2 深复制   // 基于原来对象, 复制出一个全新的对象, 就是堆内存中也复制了一个对象出来
  
	let date = [1, 2, 3]
	let _date = JSON.parse(JSON.stringify(date))

	let arr = [1, 2, 3]   // 创建新对象 hh
	let [...hh] = arr   // 等价于 let hh = [...arr]

	let obj = {a: 1, b: 2}   // 创建新对象 kk
	let {...kk} = obj   // 等价于 let kk = {...obj}



2 JSON 方法

  1 JSON.parse(jsonStr)   // json 字符串转为 JS 对象

  2 JSON.stringify(obj)   // JS 对象转为 json 字符串




3 改变 this 指向   // 统一指向 obj

  1 bind()   // 只改变 this 指向, 不执行函数
 
 	1 function test() {console.log(this)} -> test = test.bind(obj)  

    2 var hh = function() {}.bind(obj)

    3 setInterval(function() {}}.bind(obj),1000)


  2 call()   // 在改变指向的同时, 会执行函数, 并可以传递实参给函数

    1 function test(a, b) {console.log(this)} -> test = test.call(obj, 1, 2)

	2 var hh = function() {}.call(obj, 1, 2)
	

  3 apply()   // 改变指向并执行, 但是接收的参数却是数组

	1 function test(a, b) {console.log(this)} -> test = test.apply(obj, [5, 6])
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值