这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
JavaScript 客户端脚本语言
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果.
小编给大家带来一片关于 javascript 的基础教学内容,关于 Function 函数的训练与理解,一起学习下吧.
Function 函数是 javascript 的基础也是实现功能的一个引爆点,我们通过实例分析让你对 Function 函数有一个更加深刻的理解以及在实际中的用法讲解.
Function 确实是一个对象. 而我们定义的任何一个函数其实都是 Function 对象的一个实例, 也可以理解为指向 Function 对象的一个实例.
既然是对象的一个实例, 那肯定指向了 Function 类型的一个引用. 既然指向了一个引用类型的内存地址, 那你也可以简单的把我们定义的函数理解为一个变量, 这个变量指向了一个引用类型的地址, 这个地址指向了 Function 对象的一个实例.
既然我们定义的函数其实是一个变量, 那这个函数实例地址可以同时指向多个变量.
看下面的代码:
var add = new Function("n", "m", "return n + m");
上面是标准的函数定义, 调用了 Function 对象的构造函数, 这个构造函数把前面的 N 个参数都默认为新函数的参数, 直到最后一个参数认为是新函数的函数体.
从上面的语句中非常直观的看到 add 这个变量指向了一个 Function 类型的实例, 但是这种命名方法非常繁琐, 等价于:
(1) 函数表达式
(2) 函数申明
var add=function(n,m){
return n+m;
}
由于 javascript 语言中的申明提前, 所以一版提倡用第二种方法定义函数, 关于函数申明提前单独开辟一篇来说
function add(n,m){
return n+m;
}
但是第一种定义方法让人很直观看到 add 是一个指向函数实例的一个变量.
既然是一个变量, 就可以赋值给其他变量, 可以当做参数在函数中传递, 也可以从函数返回.
所以 var add2=add3=add; 现在 三个变量都指向了这个实例的引用, 现在 add=null; 以后 add2,add3 俩个函数完全可以使用不受影响, 因为 add 移除函数对象的引用后指向了 null 的引用. 所以根本不影响 add2 和 add3 两个函数.
所以函数可以当做其他函数的参数传入.
所以函数可以当做函数的返回值返回.
因为函数名只是一个指向函数实例的变量, 所以 javascript 中函数不会有 重载, 因为相同的变量指向的是相同的引用地址. 最后表示的还是同一个函数.
函数既然是对象的实例, 那么就应该有属性, 就应该有方法. 所以 javascript 中的 函数有属性也有方法.
比较重要的 4 个属性 arguments , this , length , prototype
arguments 表示当前函数的参数类数组, 这个属性很特殊, 他自己还有个属性叫 callee ,
arguments.callee 属性保存了一个指针, 指针指向了拥有此 arguments 属性的函数实体 (也就相当于函数名)
this 属性是当前环境, 类似与 C# 中的 this, 表示当前上下文
length 属性表示当前函数接收最大参数个数
prototype 表示该函数的原型, 也就是把对象实例的方法完整的保存下来, 换句话说就是原型上的方法都继承下来了. 比如 toString() valueOf() 等.
接下来,我们来看看 function 函数种类
普通函数:介绍普通函数的特性:同名覆盖,arguments 对象,默认返回值等.
匿名函数:介绍匿名函数的特性:变量匿名函数,无名称匿名函数.
function ShowName(name) {
alert(name);
}
闭包函数:介绍闭包函数的特性.
// 变量匿名函数,左侧可以为变量,事件等
var anonymousNormal = function (p1, p2) {
alert(p1+p2);
}
anonymousNormal(3,6);// 输出 9
function funA() {
var i = 0;
function funB() { // 闭包函数 funB
i++;
alert(i)
}
return funB;
}
var allShowA = funA(); // 全局变量引用:累加输出 1,2,3,4 等
function partShowA() {
var showa = funA();// 局部变量引用:只输出 1
showa();
}
来源: http://www.phperz.com/article/18/0130/361564.html