JS 基础逻辑关系
JS中万物皆为对象。
JS代码应做到高内聚、低耦合。
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。
耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间
要高度紧密,但是各个模块之间的相互依存度却要不那么紧密。
内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合。
JS面向对象三大特征为:封装、继承、多态。
函数的三属性:length形参的个数,name函数名,prototype函数原型。这是看得见的属性,还有scope作用域等看不到的属性。
JS的执行过程:
1.语法检测:检测你的代码有没有基本的语法错误。
2.预编译:
①会生成一个对象,这个对象装的就是作用域,称为GO(global object),当全部挂载完成后,然后代码再去逐行执行。
GO = { }
②分析var声明,变量名作为GO对象的属性名,值为undefined。
GO = { 变量名:undefined }
③分析函数声明,函数名作为GO对象的属性名,值为函数体,如果遇到同名的属性,直接覆盖掉。
GO = { 变量名:undefined
函数名:函数体 }
3.逐行执行
①函数调用执行前的一瞬间,会生成一个函数的AO对象(active object)。
②分析参数,形参作为AO对象的属性名,实参作为AO对象的属性值。
③分析var变量声明。
④分析函数声明,同名覆盖。
作用域链:查找过程是从上往下进行查找,从当前父级找起,直到全局作用域。无法找子级作用域或者兄弟级作用域。
闭包:
定义:当内部函数被保存到了外面的时候,就会形成闭包,闭包会导致原有的作用域链不释放,造成内存的泄露,故而尽量不用闭包则不用。
功能:①实现共有变量 ②作缓存 ③实现封装,让属性私有化 ④模块化开发,防止污染全局变量。
函数声明和函数表达式区别:
1.在预编译的时候有区别;
2.变成了函数表达式以后,这个函数名基本上就没有作用;
3.表达式可以被直接拿来用的,函数表达式也是表达式,可以直接用执行符号执行。