JavaScript 知识点

这篇具有很好参考价值的文章主要介绍了JavaScript 知识点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

立即执行函数

  • 代码
    (function () {
    	// ...
    })();
    
  • 创建函数的同时立即执行,没有绑定任何事件,也无需等待任何异步操作
  • function () {} 是一个匿名函数,包围它的一对括号将其转换为一个表达式,紧跟其后的一对括号调用了这个函数。立即执行函数也可以理解为立即调用一个匿名函数。最常见的应用场景就是:将变量的作用于限制于函数内,避免命名冲突
  • 实现代码模块化

闭包

  • 概念
    • 定义在函数内部,能够访问其他函数局部变量的函数
    • 只有函数内部的子函数才能读取局部变量,因此可以把闭包理解成定义在一个函数内部的函数
  • 闭包的作用
    • 通过闭包可以在函数外部访问函数内部的变量,闭包将函数外部和内部进行了链接。
    • 使用闭包之后,外部函数的变量就会被存在内存中,不会被垃圾回收机制回收
    • 闭包让你可以在一个内层函数中访问到其外层函数的作用域。MDN 闭包
  • 在 JavaScript 中,闭包会随着函数的创建而被同时创建。
  • 当外部函数返回之后,内部函数依然可以访问外部函数的变量。
    function f1() {
    	let n = 0;
    	// f2() 是内部函数,一个闭包
    	function f2() {
    		n += 1;	// 使用了父函数中声明的变量
    		alert(n);
    	}
    	return f2;
    }
    let f = f1();
    f();
    
    • f1()创建了一个局部变量n和一个名为f2()的函数。f2()是定义在f1()里的内部函数,并且仅在f1()函数体内可用。f2()没有自己的局部变量,因为它可以访问到外部函数的变量,所以f2()可以使用父函数f1()中声明的变量n
    • 词法作用域根据源代码中声明变量的位置来确定该变量在何处可用。嵌套函数可访问声明于它们外部作用域的变量。

使用闭包定义私有变量

function P() {
	let name;
	this.setName = function(value) {
		name = value;
	}
	this.getName = function() {
		return name;
	}
}
let p = new P();
p.setName("Func");
console.log(p.name);		// undefined
console.log(p.getName());	// Func

prototype

  • 每个 JavaScript 的构造函数都有一个 prototype属性,用于设置所有实例对象需要共享的属性和方法。
  • prototype属性不能列举。
  • JavaScript 仅支持通过prototype属性进行继承属性和方法。
    function Func(x, y) {
    	this.length = x;
    	this.width = y;
    }
    Func.prototype.getDimensions = function() {
    	return {
    		length: this.length,
    		width: this.width
    	}
    }
    let x = new Func(3, 4);
    let y = new Func(5, 6);
    console.log(x.getDimensions());
    console.log(y.getDimensions());
    

变量提升

  • 函数首先被提升,然后才是变量。
  • 函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。
  • 当变量(仅声明未初始化或赋值)和函数同名时,引用变量名(函数名)的位置如果是在变量被赋值之前,那么此时引用的就是函数;如果引用是在变量赋值之后,那么引用的就是变量。
  • 函数声明和变量声明提升以及优先级

柯里化

  • 让函数变得更加灵活,可以一次性传入多个参数调用它,也可以只传一部分参数,让它返回一个函数去处理剩下的参数
    let add = function(x) {
    	return function(y) {
    		return x + y;
    	}
    }
    console.log(add(1)(1));	// 2
    let add1 = add(1);
    console.log(add1(2));	// 3
    

函数重载

  • 理解下面代码需要知道一个知识点
    let len = (function() {}).length;
    console.log(len);	// 0
    
    let len1 = (function(a) {}).length;
    console.log(len1);	// 1
    
    let len2 = (function(a, b) {}).length;
    console.log(len2);	// 2
    
    • 一个function直接.length返回的是函数期望传入的参数数量,即形参的个数。
  • function addMethod(object, name, f) {
    	let old = object[name];
    	object[name] = function() {
    		if (f.length == arguments.length) {
    			return f.apply(this, arguments);
    		} else if (typeof old == "function") {
    			return old.apply(this, arguments);
    		}
    	}
    }
    
    function find0() {
    	return this.names;
    }
    
    function find1(firstName) {
    	let result = [];
    	for (let i = 0; i < this.names.length; i++) {
    		if (this.names[i].indexOf(firstName) == 0) result.push(this.names[i]);
    	}
    	return result;
    }
    
    function find2(firstName, secondName) {
    	let result = [];
    	for (let i = 0; i < this.names.length; i++) {
    		if (this.names[i] == firstName + " " + secondName) result.push(this.names[i]);
    	}
    	return result;
    }
    
    let people = {names: ["Tom Jerry", "Tom Dog", "Jerry Dog"]};
    
    addMethod(people, "find", find0);
    addMethod(people, "find", find1);
    addMethod(people, "find", find2);
    
    console.log(people.find());					// 调用 find0
    console.log(people.find("Tom"));			// 调用 find1
    console.log(people.find("Tom", "Jerry"));	// 调用 find2
    
    • 从效果上来说,people对象的find方法允许 3 种不同的输入:0 个参数时,返回所有人名;1 个参数时,根据 firstname 查找人名并返回;2 个参数时,根据完整的名称查找人名并返回。
    • 难点在于,people.find只能绑定一个函数,那它为何可以处理3种不同的输入呢?
    • 就此片段中addMethod函数的调用顺序可知,people.find最终绑定的是find2函数,然而在绑定find2时,oldfind1;绑定find1时,oldfind0。3 个函数通过闭包链接起来。

文章来源地址https://www.toymoban.com/news/detail-682243.html

到了这里,关于JavaScript 知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【字节面试】Fail-fast知识点相关知识点

    字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 什么是Fail-fast机制? Hashmap是否拥有Fail-fast机制? ConcurrentModificationException异常原因和解决方法是什么? 哪些你常

    2024年01月22日
    浏览(48)
  • [知识点整理]中科院/国科大 自然语言处理nlp 期末考试知识点整理

    本文为2022秋网安学院的自然语言处理课程期末复习知识点整理,水平有限,整理的答案可能有错误或遗漏,欢迎大家指正。 文章的第二部分内容参考了学校学姐的文章,文章写的很好,大家可以关注她: (133条消息) 【一起入门NLP】中科院自然语言处理期末考试*总复习*:考

    2024年02月09日
    浏览(50)
  • ospf知识点汇总

    OSPF : 开放式最短路径优先协议 使用范围:IGP 协议算法特点: 链路状态型路由协议,SPF算法 协议是否传递网络掩码:传递网络掩码 协议封装:基于IP协议封装,协议号为 89 一.OSPF 特点 1.OSPF 是一种典型的链路状态型路由协议 2.传递信息称作LSA,LSA 链路状态通告,包含路由

    2024年02月09日
    浏览(41)
  • Web知识点复习

    1. get/post请求优缺点 (1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中) (2)post发送的数据更大(get有url长度限制) (3)post能发送更多的数据类型(get只能发送ASCII字符) (4)post比get慢,get和post请求的过程中GET产生一个T

    2024年01月22日
    浏览(43)
  • 【python知识点】锦集

    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/132368704 出自【进步*于辰的博客】 注:本文可能不适合 0-Python 基础的博友,因为对于各类知识点,我阐述的宗旨是“ 阐明使用细节 ”,而不是基础知识。 细节、

    2024年02月12日
    浏览(44)
  • 竞赛知识点5【图论】

    图论起源于著名的哥尼斯堡七桥问题——从这四块陆地中任何一块开始,通过每一座桥正好 一次,再回到起点。欧拉在 1736 年解决了这个问题,欧拉证明了这个问题没有解,并且推广 了这个问题,给出了对于一个给定的图可以某种方式走遍的判定法则。这就是后来的欧拉路

    2024年02月09日
    浏览(54)
  • 集合基础知识点

    当 Java 程序中需要存放数据的时候,通常会定义变量来实现数据的存储,但是,当需要存储大量数据的时候该怎么办呢?这时首先想到的是数组,但是!数组只能存放同一类型的数据,而且其长度是固定的,那怎么办了?集合便应运而生了。 Java 集合类存放在 java.util 包中,

    2024年02月03日
    浏览(60)
  • 硬件基础知识点

    D:十进制 B:二进制 H:十六进制 二进制→十六进制 整数部分从右往左,小数部分从左往右。 四个二进制数看作一个十六进制数,不足的补零。 十六进制→二进制同理。 十进制→二进制 方法一:短除法 除二倒取整,乘二正取余 方法二:拆分法(二进制减法) 十进制数转

    2024年02月06日
    浏览(52)
  • iOS知识点

    iOS知识点 iOS 事件传递及响应链 iOS | 事件传递及响应链 - 掘金 https://github.com/iOS-Mayday/heji/blob/main/UI%E9%9D%A2%E8%AF%95%E8%A6%81%E7%82%B9.md#%E4%BA%8B%E4%BB%B6%E5%88%86%E5%8F%91%E6%9C%BA%E5%88%B6 这里面有一系列的重点 dispatch io.h dispatch io.h - 简书 iOS直播类APP开发流程解析 iOS直播类APP开发流程解析

    2024年02月06日
    浏览(35)
  • 理论力学知识点

    文中的图片截图来自:【理论力学(免费)】理论力学期末考试速成课,不挂科!! 理论力学复习三大方面 静力学:研究物体平衡及平衡条件 运动学:研究物体的几何运动 动力学:研究物体运动与作用力之间的关系 三力平衡汇交:若刚体在三个里的作用下处于平横,且其

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包