JS知识小笔记

目录

一、作用域(可拓展)

二、闭包

1.闭包(Closure)

2.闭包的使用场景

3.闭包的实际应用(可拓展)

4.闭包的缺陷

三.this

事件处理函数中的this

四.面向过程和面向对象

总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、作用域(可拓展)

作用域决定了变量、函数和对象在代码中的可访问性。JavaScript中的作用域分为以下几种:

  • 全局作用域
  • 函数作用域
  • 块级作用域
  • 词法作用域
  • 模块作用域
  • 动态作用域
  • 作用域链

二、闭包

1.闭包(Closure)

是指一个函数能够访问并记住其词法作用域(Lexical Scope),即使这个函数在其词法作用域之外执行。闭包是 JavaScript 中非常强大的特性,它允许函数“记住”并访问定义时的环境,即使这个环境已经不再存在。

const foo = ()=>{
    var arr=[];
    var i;
    for (i=0;i<10;i++){
        arr[i]=function In(){
           console.log(i);
           
        }
    }
    return arr[0];
}
   

 在这个代码中,由于内部函数In调用外部变量i 即使foo函数执行完毕,var i 仍会被In记住,此时In就形成了一个闭包

2.闭包的使用场景

-当使用FP的时候基本就会使用闭包

-当一个函数执行,和上下文相关,就有闭包

-闭包是用来保存执行环境的,也包括环境内的变量

3.闭包的实际应用(可拓展)

3.1.1 数据封装

3.1.2 回调函数

3.1.3 函数柯里化

3.1.4 模块模式

4.闭包的缺陷

影响性能:过度使用闭包尤其是循环创建会降低性能

内存泄漏:闭包会导致其词法作用域中的变量无法被垃圾回收,从而可能导致内存泄漏


三.this

非严格模式this

普通函数被调用时,因为全局的方法和属性都是window对象的方法和属性,所以this指向全局对象(浏览器中的window),严格模式下,this的值是undefined。

函数调用对象this

当函数作为对象的方法调用时,this指向该对象。

当函数作为构造函数调用时,this指向新创建的对象。(函数通过new关键字调用,this指向新创建的实例对象)

箭头函数中的this

首先,箭头函数没有自己的this,全局作用域下,箭头函数的this指向全局对象,而在对象的方法中使用箭头函数时,this指向定义箭头函数时所在上下文的this值。

事件处理函数中的this

在DOM事件处理函数中,this默认指向触发事件的DOM元素。


显式绑定this

call,apply,bind可以显式的绑定this指向特定对象。


四.面向过程和面向对象

1.JS对象的创建

//JS对象的创建
Object.create();
var bar = {};
new 关键字;
//三者的区别
Object.create()创建了一个对象

let p =  Object.create(q) ; // ->p._proto_===q;

p的原型指向q; //原型链

当需要调用p对象的一个方法或属性时,如果p上没有则去q 


总结

变量提升,函数提升

Js本身没有类,Js万物皆对象

this 是动态绑定的,取决于函数调用的上下文。
普通函数调用时,this 指向全局对象(非严格模式)或 undefined(严格模式)。
对象方法调用时,this 指向该对象。
构造函数调用时,this 指向新创建的实例。
箭头函数没有自己的 this,它会继承外部函数的 this。
显式绑定:通过 call()、apply() 或 bind() 可以显式设置 this。
理解 this 的关键在于调用时的环境,它决定了 this 的指向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值