javascript_03
来源:互联网 发布:韩孝珠李钟硕 知乎 编辑:程序博客网 时间:2024/05/22 08:04
一. 函数的定义
<script type="text/javascript">function fn(){}//alert(typeof fn);//function/*1.没有返回值修饰符2.参数不需要修饰符*///静态定义/*function fn1(a,b) {return (a+b);}//alert(fn1(20,30));//匿名函数(function (a,b) {//alert(a+b);})(20,20);(function () {//alert("hello");})();//字面量方式 /直接量var fun=function(a,b){//alert("hello"+(a+b));}fun(10,10);var fun2=function f(){//alert("good job");}fun2();*///动态匿名方式 var func=new Function("x","y","alert(x+y);");//x是方法的参数 alert(x);方法体 //func(100,120);/*函数的使用方式:1.直接调用:函数名字(参数。。。)2.放在a标签里面使用3.通过事件来使用4.递归5.闭包 */</script></head><body><a href="javascript:func(100,150)">我是一个链接</a><button onclick="javascript:func(100,150)">点我啊</button></body>1.没有返回值修饰符
2.参数不需要修饰符
3.静态定义,可以先调用再定义
4.匿名函数:把匿名函数当成一个整体
5.动态匿名方式:不推荐使用
6.函数的使用方式:
1.直接调用:函数名字(参数。。。)
2. 放在 a 标签里面使用
3. 通过事件来使用
4. 递归
5. 闭包
二.修改指针
<script type="text/javascript">//指针:函数的调用者对象function fun() {alert(this);}fun();//this 代表的是调用该函数的对象 ---window//修改指针:改变调用函数的对象 function fun1(a,b){alert(a+b);alert(this);}function fun2(a,b){alert(a+b);}//需求:讲fun1的调用 指针指向fun2,该怎么办?fun1.call(fun2,20,30);//输出来是fun2对象==说明指针指向fun2(也就是 f2调用f1)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>指针:函数的调用者对象
三.参数
<title>参数</title><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(20,30,40);function func(){alert(func.caller);//返回的是调用该函数的函数对象 }//func();//null</script></head><body></body>
四.递归
<title>递归</title><script type="text/javascript">//递归:函数自身调用自己(通俗)function fun(n){if(n==0){return 0;}return n+fun(n-1);}alert("所求之和为:"+fun(3));//1,1,2,3,5,8,13,21,34,56function func(n){if(n==1||n==2){return 1;}else{return func(n-2)+func(n-1);}}alert("所求的数为:"+func(6));</script></head>
五.创建对象
1.字面量方式:可以动态添加属性 局限性:只代表一个对象2.使用 function 模拟 class
function Animal1(name, age) {this.name = name;this.age = age;this.bite = function() {alert(this.name + "又咬人了。。。");}}var animal1 = new Animal1("小泰迪", 2);var animal2 = new Animal1("小藏獒", 2);/* animal1.bite();animal2.bite(); */
3. 使用工厂方式
var obj = new Object();obj.name = "李四";obj.age = 25;obj.eat = function() {alert(this.name + " == eating...");}// obj.eat();
4. 使用原型对象
// 4. 使用原型对象function Cat() {Cat.prototype.name = "小花猫";Cat.prototype.age = 2;// 函数里面没有静态域(没有静态变量)Cat.prototype.catchMouse = function() {alert(this.name + "==" + this.age);}}
5. 结合原型以及 function 来
// 5. 结合原型以及 function 来function Pig(name, age) {this.name = name;this.age = age;Pig.prototype.sleep = function(){alert(this.name + " == 吃完又要去睡觉了。。");}}
6. 动态原型的方式
// 6. 动态原型的方式function fun(name, age) {this.name = name;this.age = age;if(typeof fun.prototype.eat == "undefined") {fun.prototype.eat = function() {alert(this.name);}
六. 闭包
<title>闭包</title><script type="text/javascript">/* 概念: 1. 函数里面的函数 2. 在外函数内部能调用外函数局部变量的函数 —— 闭包 */ /* 作用域:作用的范围 全局作用域: 局部作用域: 全局变量: 1. 函数外部定义的变量 2. 不用 var 修饰的变量 局部变量: *//* var a = 20; function fun() { b = 30; // 全局变量 b++; var c = 100; // 局部变量 alert(a++); } *//* fun(); alert(a); alert(b); */ /* alert(c); *///undefined,被销毁了// 闭包的内容var num = 100;function func() {var num2 = 100; // 相当于封装// 对外提供的公共的方法 setter 方法method = function() {num2+=1;}// public 方法var method2 = function() { // 闭包alert(num2);// alert("hello");}return method2; // 返回值}// func()(); 调用内部函数// 问题:在函数外部要使用函数的局部变量,该怎么做?// 确保局部变量在函数执行完毕的时候还存在于内存当中——闭包/* 闭包作用: 1. 访问函数局部变量 2. 让局部变量长时间保留在内存当中 */var result = func(); // result == ? method2method();result(); // method2() 打印101 ====说明 num2 还存在在内存当中method();result(); // method2() 打印102 ====说明 num2 还存在在内存当中// 弊端:会浪费内存</script></head><body
概念:
1. 函数里面的函数2. 在外函数内部能调用外函数局部变量的函数 —— 闭包
作用:
1. 访问函数局部变量
2. 让局部变量长时间保留在内存当中
阅读全文
0 0
- Javascript_03
- Javascript_03
- javascript_03
- JavaScript_03 事件
- 前端学习_Series2_01.JavaScript_03
- BIO与NIO、AIO的区别
- 面向对象的三大特点
- 最大子序列及标记首尾坐标
- unity3d强制转换
- 大数据到底是什么
- javascript_03
- GC 的那些事基础篇(一)(未完待续......)
- Linux下rz/sz安装及使用方法
- leetcode--Remove Nth Node From End of List
- 集群session丢失的问题
- 当前时间是否在区间范围内
- 常见的HTTP状态码
- java多线程Thread与Runnable的区别与使用深入理解
- 全局变量和局部变量