JS
基本概念
- 单线程,(GUI线程和JS线程互斥)
- 动态,弱类型(运行时不需要确定数据类型的语言,变量在使用之前不需要声明类型)
const company = 'Bytedance';
- 面向对象,函数式
- 解释类语言,JIT
- 安全,性能差
数据类型
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的简单的数据类型不能在改变
作用域
静态作用域在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');
}
//正常输出
怎么执行
JIT:JIT是just in time的缩写,也就是即时编译。通过JIT技术,能够做到Java程序执行速度的加速
执行上下文
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
const obj = {
name : 'ze',
showName(){
console.log(this.name)
}
}
const obj1 = {
name:'bit'
}
obj.showName();
//输出ze
obj.showName.apply(obj1);//也可用call,bind
//输出bit
垃圾回收
标题:深入理解 JS - 掘金