javascript基础学习笔记1
预编译
- 执行AO对象(Activation Object)
- GO全局对象(Gloable Object)
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
- 将实参值和形参统一
- 在函数体里面找函数证明,值赋予函数体
AO有就用AO,(GO现有,AO后有)
- 作用域链,里面有多个AO,GO
function a(){
function b(){
function c(){}
c();
}
b();
}
a();
a:defined [[scoped]] ---- 0:GO
a:doing[[scoped]] ---- 0:aAO , 1:GO
b:defined [[scoped]] ---- 0:aAO , 1:GO
b:doing[[scoped]] ---- 0:bAO , 1:aAO , 2:GO
c:defined [[scoped]] ---- 0:bAO , 1:aAO , 2:GO
c:doing[[scoped]] ---- 0:cAO , 1:bAO , 2:aAO , 3:GO
闭包
当内部函数被保存到外部时,将会产生闭包
。闭包会导致原有作用域链不释放,造成内存泄露
。
- 实现公有变量
函数累加器 - 可以做
缓存
(存储结构)
eater - 可以实现封装,属性私有化
Person() - 模块化开发,防止污染全局变量
函数累加器
function a(){
var i=0;
function b(){
i++;
console.log(i);
}
return b;
}
var demo = a();
demo();
demo();
eater
function eater() {
var food = "";
var object = {
eat : function(){
console.log("i am eating"+food);
food = "";
}
push : function(myFood){
food = myFood;
}
}
}
【javascript基础学习笔记1】私有化变量
function Person(wife) {
var propertyWife = "b";
this.wife = wife;
this.property = function() {
this.wife = propertyWife;
}
this.changeWife = function(target) {
propertyWife = target;
}
this.sayWife = function(){
console.log(propertyWife);
}
}
试题
function a() {
function b() {
var bbb = 234;
document.write(aaa);
}
var aaa = 123;
return b;
}
var glob = 100;
var demo = a();
demo();
输出对象123
为什么原始值不能用对象,但是能访问里面的值?
var str = 'abc';
str.len = 3;
//因为在这里进行了包装类。
//new String('abc').len = 3 delete;
console.log(str.len);
//new String('abc').len;
defined
原型链(prototype)
继承
原型也是对象
function Person() {
var this = {
//__proto__ : Person.prototype
}
}
每个构造函数都有隐世的proto属性,都指向原型链,当然可以更换。new Person().proto = new Son()
原型链的proto为Object.prototype,Object.prototype为所有原型链的终端。
原型链下的构造函数的增删改查1.增
会在自己的构造器内增加函数
2.删
删除自己构造器内的
3.改
会在自己的构造器生成然后修改
4.查
可以查原型的
Object.create(原型)生成对象
参数原型只能是object和null。如果为null,就会生成没有任何结构的对象(
没有__proto__
)apply/call方法 每个函数都有来自非继承来的方法,call和apply。
他们的主要用途是拷贝其他构造函数的用途,变量给自己。
function Person(name,sex,age) {
this.name = name;
this.sex = sex;
this.age = age;
}function Docoter(name,sex,age,job) {
Person.call(this,name,sex,age);
this.job = job;
}//不new就call方法就没什么用,因为需要传this
var doctor = new Doctor("陈侑","男","23","医生");
文章图片
fighting!!!
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 事件代理
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)