IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Node.js学习笔记(四) -> 正文阅读

[JavaScript知识库]Node.js学习笔记(四)

JavaScript函数

  • 传统语言的函数编译好之后,成为一个代码块
  • JS里面,函数被认为是一块可以反复调用的代码块
  • eval函数对应javaScript引擎底层的命令,可以将字符串当作语句在任意地方执行

JS里面把函数作为第一等公民,函数可以拥有他自己的属性和方法,就如同对象一般

  • 赋值给变量
  • 赋值为对象的属性
  • 作为参数传递给其他函数
  • 作为函数的结果返回
  • 给函数配置方法和属性

函数的本质是Function函数创建的对象

  • Function的原型就是Function的胚胎属性
  • toString方法,获取函数的实现源代码的字符串
  • 改变对象方法中this指针的三剑客
    • 注释:JS里面的方法可以修改关联的对象,就是下面的三种方式,
    • call方法:Function.call()
    • apply方法:
    • bind方法:
    • 以上三个方法具体见ppt,call和apply都会立即执行,二者只是参数写法不同
    • bind和其他两个不同的是返回值是一个函数,并且需要调用一下

函数定义

//	本质
var add = new Function(
'x',
'y',
'return x+y;'
)

函数可以在定义的时候可以不加名称,作为匿名函数,成为即使函数(有点像java匿名内部类的性质)

函数的调用

  • 普通函数:函数名(参数列表)

  • 对象方法:对象名.函数名(参数列表)

  • 构造函数:new 函数名(参数列表),会新建一个对象

  • 通过函数的call、bind、apply方法间接调用

function Hello(){
	return 1;
}
//	不同的调用产生不同的结果
console.log(Hello)
console.log(Hello())

函数的参数

  • 实参如果是原始类型,则是值传递,形参不改变实参

  • 实参是对象类型,则是引用传递,浅复制,修改是形参会修改实参

  • 实参和形参数量和类型不一致都不会报错

    • 实参多:在函数1arguments中可以访问
    • 形参多:没有赋值的就是undefined
function max(){
  var max = Number.NEGATIVE_INFINITY
  
}

剩余参数

剩余参数通过结构赋值剩余项来处理参数

函数的参数默认值

function Point(x=0,y=0){
  this.x = x ; 
  this.y = y ;
}

函数的使用

  • 函数赋值给变量。函数的this是全局对象global
  • 函数作为参数,比如 加减乘除

柯里化:将多参数函数转化为但参数函数,本质上是逐步传递,逐步缩小函数的适用范围,逐步求解,降低通用性,提高适用性。

函数数组

就是把函数的声明和定义放在一个大的数组对象里面,有大括号包起来,然后【】运算访问就行

自定义函数属性

函数也是对象,可以随时添加属性,函数需要一个静态变量时,最好的方式就是定义一个函数的属性,而不是全局变量。

//	(1)
function person(){
  this.name = 'Tom';
}

//	(2)
function person(){}
person.name = 'Tom';(3)

//	(3)
function person(){}
person.prototype.name = 'Tom'

1是公有属性
2是静态属性
3是原型共享属性

高阶函数

就是操作函数的函数,接受多个函数作为参数,并且返回一个新的函数

传统编译语言进程空间

  • 代码区:

  • 全局数据区:

  • 堆区: 动态内存,提供程序随机申请

  • 栈区:函数数据区

JavaScript代码运行机制

  • js代码是一文本形式加入js引擎执行
  • js代码文本类型
    • 全局代码:不包括函数体、Generator定义体和类定义的代码
    • 函数代码:函数体、Generator定义体和类定义体的代码
    • Eval代码:
    • 模块代码:
  • 不同类型的上下文:看ppt,没记下来
  • 执行上下文(execution context):简称EC,代码执行时的变量环境,全局代码在全局EC中执行
  • 执行上下文可以认为是一个对象:三个属性
    • 变量对象VO:
    • 作用域链SC:
    • this:有激活EC的调用者来提供,

闭包

  • 函数的定义和函数的执行在不同的EC

this

  • this是EC的一个属性
  • 全局代码中,this始终是全局对象
  • 在函数代码中,this在函数执行过程中不能被修改
  • 函数一构造函数方(new新建函数对象)式调用的话,this指向新创建出来的对象。
  • 函数可以在调用的时候指定this值,可以用call等三剑客修改this(函数执行时不可以修改)
    • 主要使用call和apply进行修改,因为这两个是定义在Function.prototype上的

递归函数

  • JS也有递归函数
    • 直接递归:调用自身
    • 简介递归:多个函数循环调用对方形成调用链,进行递归
    • 递归本质:每次递归都会在EC stack上加一个EC,
    • 尽可能不使用递归,影响函数运行效率
console.time("记时开始")

console.timeEnd("记时结束")

算法对函数效率的影响

对象的构造

语法糖,写出来和C++ java差不多

对象的继承

使用构造函数对原型进行深拷贝,避免引用复制的浅拷贝。

继承的步骤

  • 属性的构造
  • 方法的构造
  • 注释:ES6 的class语法糖,非常接近java和C++,JS根本没有类的概念,本质还是前两个
    • extend关键字:表示继承
    • super关键字:表示父类

严格模式

  • js的第二个运行模式
  • 为什么设立严格模式:严格语法,减少怪异,会增加更多的报错,提高编译效率和安全性
  • 严格标志:use strict 加在代码前面

严格模式的主要限制

  • 太多了,看ppt吧

  • 禁止使用this指向全局变量

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:54:34  更:2021-10-17 11:56:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 19:58:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码