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
----------------------------