当前位置:编程学习 > wap >>

JavaScript世界的一等公民 - 函数


分享这篇不错的文章,原文地址:http://g.csdn.net/5247248
简介
 
在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作为返回值,就需要通过函数指针(function pointer)、代理(delegate)等特殊的方式周折一番。
 
而在JavaScript世界中函数却是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值、传参、返回,这样的函数也称之为第一级函数(First-class Function)。不仅如此,JavaScript中的函数还充当了类的构造函数的作用,同时又是一个Function类的实例(instance)。这样的多重身份让JavaScript的函数变得非常重要。
 


一、JavaScript函数入门级
 
JavaScript函数像一般语言一样也是遵循先声明后使用的原则,函数名只能包含字母、数字、下划线或$,且不能以数字开头。函数常见的声明方式有以下两种:
1 // 直接声明函数myfunc 2 function myfunc(/* arguments */) { 3 } 4   5 // 把匿名函数赋值给本地变量myfunc 6 var myfunc = function(/* arguments */) { 7 } 

注意,上面两种函数声明方式存在细微的差别:第一种方式在声明时就是一个命名的函数,无论是声明在调用之前、调用之后,甚至是不会执行到的位置(例如return语句之后或是永远不会为真的分支里),都在整个作用域可访问;第二种方式是通过把匿名函数赋值给变量的方式,严格意义上说这不是一个函数的声明(function declaration)而是一个函数表达式(function expression),在赋值之前这个函数不能被任何代码访问到,也就是说这个赋值必须在调用之前完成,否则调用时会出现错误:"TypeError: undefined is not a function"。例如:
myfunc1(); // 能够正常调用,因为myfunc1采用直接声明的方式 2   3 function myfunc1() { 4 } 5   6 myfunc2(); // 出错 TypeError: undefined is not a function 7   8 var myfunc2 = function() { 9 }; 
函数的基本调用方式与传统语言相同用一对括号调用: myfunc()。JavaScript的函数也支持直接或间接的递归(recursive)调用,例如经典的斐波那契函数用JavaScript可以这样实现:
1 function fib(n) { 2   if (n == 1 || n == 2) { 3     return 1; 4   } else { 5     return fib(n - 2) + fib(n - 1); 6   } 7 } --------------------编程问答-------------------- 很好的学习资料!谢谢 --------------------编程问答-------------------- 顶啊~!!   study

顺便问下   CSDN的资源重复下载会重复扣分么? --------------------编程问答-------------------- 不错不错!! --------------------编程问答-------------------- 很好的资料 谢谢分享 --------------------编程问答-------------------- 最后一个“妖怪”可真强大啊!
但是也很容易带来负面问题! --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 2 楼 ShenShiampMoYi 的回复:
顶啊~!!   study

顺便问下   CSDN的资源重复下载会重复扣分么?

相同ID不扣分 --------------------编程问答--------------------
引用 7 楼 zhishiheng 的回复:
Quote: 引用 2 楼 ShenShiampMoYi 的回复:

顶啊~!!   study

顺便问下   CSDN的资源重复下载会重复扣分么?

相同ID不扣分

3Q --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- jquery实战 --------------------编程问答-------------------- 很牛啊,看的很是带劲 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
alert(1);
--------------------编程问答--------------------
引用 2 楼 ShenShiampMoYi 的回复:
顶啊~!!   study

顺便问下   CSDN的资源重复下载会重复扣分么?


上面写“不会” --------------------编程问答-------------------- 在前面函数声明的部分就看到了匿名函数和嵌套函数的一种用法,由于匿名函数没有名称,不会引入新的变量污染上下文环境,而且会带来新的变量作用域,因此匿名函数常被用来防止全局环境污染。
这个好用 --------------------编程问答-------------------- 资料不错,很多以前没注意的的地方都有 --------------------编程问答-------------------- 收藏了 --------------------编程问答-------------------- 除
补充:移动开发 ,  英特尔架构的Android开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,