**闭包**
<script type="text/javascript">
/* 闭包:
1.函数里面的函数
2.在外函数内部能调用外函数局部变量的函数
作用域:
全局作用域:页面
局部作用域:方法中
全局变量:1.在函数外部定义 2.不用var修饰的变量
局部变量
*/
var a = 20;//全局变量
function fun(){
var c = 100;//局部变量
b = 30;//全局变量
b++;
alert(a++);
}
fun();
// alert(a);
// alert(b);
// alert(c);//弹不出来,undefined,被销毁了
//闭包
var num = 100;
function func(){
var num2 = 100;
//对外提供的公共方法(setter方法)
method = function(){
num+=1;
}
//闭包:确保局部变量在函数执行完毕还存在于内存中
//public方法
var method2 = function(){//闭包
// alert(num2);
alert("hello");
}
return method2;
}
// func()();//调用内部函数
var result = func();
method();
result();
</script>
**递归**
<script type="text/javascript">
//递归:函数自身调用自身 入口 出口
//累加
function fun(n){
if(n==0){
return 0;
}
return n+fun(n-1);
}
alert("所求之和为:"+fun(100));
//斐波数列
function func(n){
if(n==1|n==2){
return 1;
}else{
return func(n-2)+func(n-1);
}
}
alert("所求之数为:"+func(6));
</script>
**修改指针指向**
<script type="text/javascript">
/* 指针:函数调用者对象
*/
function fun(){
alert(this);
}
fun();//this代表调用该函数的对象---window
//修改指针:改变调用函数对象
//需求:将fun1的调用指针改变为fun2
function fun1(){
alert(a+b);
alert(this);
}
function fun2(){
alert(a+b);
}
fun1.call(fun2,20,30);//输出来是fun2的对象==说明指针指向fun2
fun1.apply(fun2,[20,30]);
//简单模拟继承
function Person(name,sex){
this.name = name;
this.sex = sex;
this.speak = function(){
alert(this.name);
}
}
function Chinese(name,sex,age){
this.name = name;
this.sex = sex;
this.age = age;
}
var person = new Person("张三","男");
var ch = new Chinese("李四","女 ");
person.speak.call(ch,"张三","男");
ch.speak;
</script>
**arguments**
<script type="text/javascript">
function fun(a,b,c){
for(var i = 0;i<arguments.length;i++){
alert(arguments[i]);
}
alert(arguments.callee);//返回当前执行的函数对象
func();
}
fun(1,2,3);
function func(){
alert(func.caller);//返回调用函数的函数对象
}
// func();
</script>
**prototype**
<script type="text/javascript">
function Animal(name,age){
this.name = name;
this.age = age;
this.eat = function(){
alert(this.name + "is eatting...");
}
this.bite = function(){
alert(this.name+"---"+this.age);
}
/* 1.可以给函数添加额外的方法或属性
2.可以类似于重写函数的方法
*/
//在函数内定义方法时有重名的,使用原型定义时,仍然以非原型为主
Animal.prototype.bite = function(){
alert(this.name+"can bite...");
}
}
//在函数外添加方法
Animal.prototype.out = function(){
alert(this.name+"---is gettng out");
}
Animal.prototype.sex = "雄性";
var animal = new Animal("阿黄",20);
animal.eat();
animal.bite();
animal.out();
alert(animal.sex);
</script>
Javascript之闭包
最新推荐文章于 2024-09-23 08:37:48 发布