JS学习记录 | 青训营笔记

43 阅读2分钟

JS

基本概念

image.png

  • 单线程,(GUI线程和JS线程互斥)
  • 动态,弱类型(运行时不需要确定数据类型的语言,变量在使用之前不需要声明类型)
const company = 'Bytedance';
  • 面向对象,函数式
  • 解释类语言,JIT
  • 安全,性能差

数据类型

image.png

const a = {
    name: 'zq'
}
const b = a
b.name = '111';
concole.log(a,b)

const str = '11';
let newstr = str;
newstr = '22';
console.log(str,newstr);

运行结果

{name:'111'}{name:'111'} 11,22

感觉像,a,b两个复杂的数据类型是两个指针,指向同一片区域,改变一个,另外一个跟着改变 str 是简单数据类型 他说复杂的数据类型是可以被改变的,const的简单的数据类型不能在改变

作用域

image.png 静态作用域在js也可以叫词法作用域,他和词法环境不一样

变量提升

针对var和函数,const 和 let没有

console.log(company);
var company = "BT";
// 不会报错,但是会输出undefined

//相当于
var company = undefined;
console.log(company)
company = "BT";

//对于一个函数
showName()

function showName(){
    console.log('zq');
}
//正常输出

image.png

怎么执行

image.png JIT:JIT是just in time的缩写,也就是即时编译。通过JIT技术,能够做到Java程序执行速度的加速

执行上下文

image.png

image.png

image.png

js进阶

闭包

(closure)是一个函数以及其捆绑的周边环境状态(lexical environment词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建。

function showName(){
    const company = "BT";
    const dep = "bianyuan";
    const name = "z1";
    console.log('company',company);
    return function(){
        console.log(dep);
        return name;
    }
}
const getName = showName();
console.log(getName());
    

通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭;但如果这个闭包以后不再使用的话,就会造成内存泄漏。 如果引用闭包的函数是个局部变量,等函数销毁后,在下次 JavaScript 引擎执行垃圾回收时,判断闭包这块内容如果已经不再被使用了,那么 JavaScript 引擎的垃圾回收器就会回收这块内存。

this

image.png

const obj = {
    name : 'ze',
    showName(){
        console.log(this.name)
    }
}
const obj1 = {
    name:'bit'
}
obj.showName();
//输出ze
obj.showName.apply(obj1);//也可用call,bind
//输出bit

垃圾回收

image.png

image.png

标题:深入理解 JS - 掘金

网址:juejin.cn/course/byte…