JavaScript高级学习笔记 day03
2021/11/20 17:12:05
本文主要是介绍JavaScript高级学习笔记 day03,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.函数的定义及调用
- 自定义函数(命名函数),this => window
function fn(){};
fn();
fn.call(); - 函数表达式(匿名函数),
var fn = function(){};
fn(); - 利用new Function
var fn = new Function(‘a’,‘b’,‘console.log(a+b)’);
fn(1,2) - 对象的方法,this => 对象o
var o = {say:function(){}};
o.say(); - 构造函数,this => star实例对象
function Star(){};
var star = new Star() - 绑定事件函数,this => 调用者
btn.onclick = function(){}; - 定时器函数,this => window
setInterval(function(){},1000) - 立即执行函数,this => window
(function(){})();
2.改变函数内部的this指向
- call()方法:可以调用函数,可以改变this指向;主要作用是实现继承
- apply)()方法:可以调用函数,也可以改变this指向,但是它的参数必须是数组,输出的是字符串;主要作用是给数组添加方法
- bind()方法:不会调用函数,只能改变this指向,返回的是原函数改变this之后产生的新函数,需要调用新函数;主要作用是有的函数不需要立即调用,但又要改变this指向,比如定时器
3.严格模式
- 严格模式:消除了语法的不合理,消除代码运行的不安全,禁用未来版本的一些语法
- 为整个脚本(script标签)开启严格模式, ‘use strict’,写在所有js代码之前
- 为某个函数开启严格模式,‘use strict’,写在函数内部,其他代码之前
3.1严格模式中的变化
- 变量必须先声明再使用
- 不能随意删除已经声明好的变量
- 严格模式下全局作用域中函数的 this 是 undefined
- 严格模式下,如果构造函数不加 new 调用,this 会报错
- 定时器 this 指向还是window
- 严格模式下,不能有重名的参数
4.高阶函数
- 高阶函数:接收函数作为参数或将函数作为返回值输出
4.1闭包
- 闭包:有权访问另一个函数作用域中变量的函数
- 作用:延伸了变量的作用范围
function(){ var num = Math.random()//局部变量num一直在 function fun(){ return num; }; return fun }; var res = fn();//res现在是函数fun() var res1 = res(); var res2 = res();//res1和res2输出的永远是同一个num
- 闭包应用:定时器
//闭包应用,3秒钟之后打印所有li元素的内容 var lis = document.querySelectorAll('li') for(var i = 0; i < lis.length; i++){ (function(i){ setTimeout(function(){ console.log(lis[i].innerHTML); },3000) })(i) }
4.2递归
- 函数内部自己调用自己,这个函数就是递归函数
- 递归里面必须加退出条件
//比如求阶乘 function fn(n){ if(n == 1){ return 1; } return n * fn(n - 1); } console.log(fn(3));
- 递归应用:遍历数组
var data = [{ id:1, name:'家电', goods:[{ id:11, name:'冰箱' },{ id:12, name:'洗衣机' }] },{ id:2, name:'服饰' }] //输入id号,就可以返回数据对象 //1、利用forEach遍历每一个对象 function getID(json,id){ var obj = {}; json.forEach(function(item){ if(item.id == id){ obj = item; //2、利用递归得到里层数据 }else if(item.goods && item.goods.length > 0){ obj = getID(item.goods,id); }; }); return obj; }; console.log(getID(data,1)); console.log(getID(data,11)); console.log(getID(data,12));
5.浅拷贝与深拷贝
- 浅拷贝:只拷贝一层,更深层次对象级别的只拷贝引用。新对象和原对象指向同一个地址,修改值,两个对象相互影响
- 深拷贝:拷贝多层,每一级别的数据都会拷贝。新对象和原对象指向不同的地址,修改值,两个对象互不影响。需要用递归判断拷贝的值属于哪种数据类型
- es6中新增的浅拷贝方法:Object.assign(new,old)
这篇关于JavaScript高级学习笔记 day03的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-06数据结构和算法面试题详解与实战
- 2024-11-06数据结构与算法面试题详解及练习
- 2024-11-06网络请求面试题详解及实战技巧
- 2024-11-06数据结构和算法面试真题详解及备考指南
- 2024-11-06数据结构与算法面试真题解析与练习指南
- 2024-11-06网络请求面试真题详解及实战攻略
- 2024-11-06数据结构和算法大厂面试真题详解与实战
- 2024-11-06数据结构与算法大厂面试真题详解及入门攻略
- 2024-11-06网络请求大厂面试真题详解及应对策略
- 2024-11-06TS大厂面试真题解析与实战指南