JavaScript引用类型Function实例详解
本文实例讲述了javascript引用类型function。分享给大家供大家参考,具体如下:
function类型
函数是对象,函数名是指针:每个函数都是function类型的实例。由于函数是对象,因此函数名是一个指向函数对象的指针,不会与某个函数绑定,一个函数可能会有多个名字。
function getsum(a, b) { return a + b; } alert(getsum(2, 3));//5 var copy = getsum; alert(copy(2, 3));//5 getsum = null; alert(copy(2, 3));//5
定义函数的方式有三种:函数声明、函数表达式、function构造函数。
function构造函数接收任意数量的参数,前面的参数枚举了函数的参数,最后一个参数是函数体。一般不推荐使用function构造函数定义函数。
var getsum = new function("a", "b", "return a + b";
javascript没有函数重载的概念,若声明了两个同名函数,则后面的函数会覆盖前面的函数。
由于函数名本身是变量,因此函数也可以作为值来使用,不仅可以传递一个函数作为参数,还可以将函数作为返回值。
function callfunction(func, arguments) { return func(arguments); } function sayhello(name) { return "hello, " + name; } var result = callfunction(sayhello, "alice"); alert(result);//hello, alice
①、函数声明
function 函数名称(参数|可选) { 函数体 }
例:
function func1(){// 声明,程序的一部分 function func() {// 声明,函数体的一部分 ...//函数体 } }
②、函数表达式
function 函数名称|可选(参数|可选) { 函数体 }
例1:
var fun = function func() {};//表达式,赋值表达式的一部分
例2:
new function func(){};//表达式,new表达式
例3:
(function func(){}); //表达式,包含在分组操作符——括号()内,括号()内只能包含表达式
例4:
[function func() {}];//表达式,数组初始化器内只能是表达式
例5:
1, function func() {};//表达式,逗号只能操作表达式
③、函数构造器
函数构造器创建的函数的[[scope]]属性仅包含全局对象。
<script> var a = 1; func1(); function func1() { var a = 2; var b = 3; var func2 = new function("alert(a); alert(b);"); func2();//1,b is not defined } </script>
函数构造器创建的函数func2可以从全局对象中取得变量a,但全局对象中没有b,因此报错:b未定义。
函数声明和函数表达式的区别
1)函数声明在进入上下文阶段创建,在代码执行阶段就已经可用了,函数表达式则是在代码执行阶段才创建,所以函数声明可以提升,但函数表达式则不能。
函数声明提升:
func();//function declaration function func(){ alert("function declaration"); }
函数表达式不能提升:
func();//报错:func is not a function var func = function (){ alert("function expression"); }
2)函数声明影响变量对象vo,也就是存储在上下文的vo中的变量对象,函数表达式不影响变量对象vo,不存在于变量对象中,这意味着既不可能通过名称在函数声明之前调用它,也不可能在声明之后调用它。但是,函数表达式在递归调用中可以通过名称调用自身。
例1:
alert(func); //报错:func is not a function。定义之前不可用,因为它在代码执行阶段创建 (function func() {}); alert(func); //报错:func is not a function。定义之后也不可用,因为它不在变量对象vo中
例2:
(function func(param) { if (param) { return; } func(true);//func可用,递归调用可以通过名称调用自身 })(); func(); // func is not a function,外部不可用
3)函数声明只能出现在程序或函数体内,不能出现在表达式或块({ … })中,如if、while或for语句中。因为javascript无块级作用域,只有函数和全局作用域。 函数表达式出现在表达式的位置。
函数声明:有的浏览器会返回if,而有的浏览器会返回else。
if (true) { function func() { alert('if'); } } else { function func() { alert('else'); } } func();
函数表达式:所有浏览器都返回if。
var func; if (true) { func = function() { alert('if'); }; } else { func = function() { alert('else'); }; } func();
更多关于javascript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《javascript常用函数技巧汇总》、《javascript错误与调试技巧总结》、《javascript数据结构与算法技巧总结》、《javascript遍历算法与技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。
推荐阅读
-
JavaScript引用类型Function实例详解
-
java 引用类型的数据传递的是内存地址实例
-
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
-
获取JavaScript异步函数的返回值实例详解
-
javascript函数递归、回调、闭包和作用域用法实例详解
-
详解JavaScript 为什么要有 Symbol 类型?
-
js中判断Object、Array、Function等引用类型对象是否相等_javascript技巧
-
详解css3+javascript实现翻页的实例代码
-
javascript获取表单数据的原始做法和升级做法实例详解
-
实例详解django开发之settings.py中变量的全局引用