04学习 JS 作用域 继承 闭包



---------------------------------------

function Fa(){};
Fa.prototype.name = 'fa';//一级
function Fb(){};

Fb.prototype = new Fa();//继承 二级
Fb.prototype.name = 'fb';

function Fc(){};
Fc.prototype.name = 'fc';
Fc.prototype = new Fb();//继承 三级

var aa = new Fc();
aa;

aa.__proto__.name = "shaozhu" //修改


aa.__proto___.name = 'cc' //修改

//这个时候 修改是是Fc 里面的

//修改 如果 自己没有 那么就会往上级去寻找 然后修改。

---------------------------------------
第一个参数是 作用域

//call(this,name,age) apply(this.[]) 在一个对象中调用另一个对象

function ParentType(name,age){//构造函数
this.name = name;
this.age = age;
}

ParentType.prototype.getParentname = function(){
return this.name;
}

function sonType(){
ParentType.call(this,"xxx",222);//子类调用父类 并且传参
//ParentType.apply()
this.name = 'tt';
}

sonType.prototype = new ParentType();//继承

sonType.prototype.getsonName = function(){
return this.name;
}

var aa = new sonType();


//aa.name tt 先从他本身开始找

//aa.age 222 本身没有 然后再从上面开始找

//理解起来 可以这设想 把一只小白鼠 包裹在一个小盒子里面

然后小盒子包裹中盒子,中盒子包裹大盒子,小白鼠要找吃的,

是先出来小盒子找,没有找到,再去中盒子找,如果没有找到再去

大盒子找,找到了就不会再往外面找了。

---------------------------------------

作用域

闭包

递归



---------------------------------------------


作用域 (这个是重点)

当前变量的作用的区域 活动的一个范围区域


全局作用域 局部作用域


作用域以函数为单位

函数里面的 可以用外面的变量 外面不可以用函数里面的变量。

---------------------------------------------

闭包

var x = 's';

function aa(){
var x = 's1';
function son(){
var x = 's2';//这里面也可以 用外面的x
return x;
};
};

---------------------------------------------

闭包 (函数 读取其它函数内部的变量)

function aa(){
var x='s1';
function son(){
var x='s2';
return x;
}
return son();//有括号 执行

}
aa();

//"s2"

//闭包 就是函数的内容 和函数的内部 连接起来的一个桥梁

-------------------------

function aa(){
var x='s1';
function son(){
var x='s2';
return x;
}
return son;//没有括号

}
aa();

返回方法体 返回的是函数体

son(){
var x='s2';
return x;
}

-------------------------
闭包

function checkSope(){
var scope = 'son';
return function sonSvope(){
var scope = "son1";
return scope
}
}
checkSope();


返回整个函数
------------------

function checkSope(){
var scope = 'son';
return function sonSvope(){
var scope = "son1";
return scope
}
}
checkSope()();//两个括号 实际不这样用

"son1"

-------------------------

自调

var fun =(
function checkSope(){
var scope = 'son';
return function sonSvope(){
var scope = "son1";
return scope
}
}()//这种用的比较多
)

fun();


结果:son1

-------------------------

闭包 例子:

function setup(x){//传的是数组

var i =0;
return function(){
return x[i++];
}
}

var next = setup(['a','b','c'])

//第一次
next();

"a"

//第二次
next();

"b"

//第三次
next();

"c"

 


-------------------------

也可以这样写

var fun = (function setup(x){//传的是数组


var i =0;

return function(){
return x[i++];

}
}(['a','b','c']));

fun();

-------------------------

闭包自调的方式

传参

var fun(
func


)


---------------------------------------------------------------------------


递归:自己调用自己

function fact(num){
if(num<=1){
return 1;
}else{
return num*fact(num-1);
}
}
fact(4)

//24

//4*3*2*1


----------------------------

原文地址:https://www.cnblogs.com/shaozhu520/p/8544679.html