Javascript函数大全
1、匿名函数JavaScript 函数定义的时候可以省略函数名. 前提是,被存储在一个变量里,也就是所缫裕梦阀谓的匿名。例如:var addNumbers = function (x, y) { return x + y; }上面的语法也叫函数表达式。可以把变量addNumbers当作函数名然后按照如下方式调用该函数。var sum = addNumbers(4, 1);如果需要一个函数作为参数传递给另一个函数时,函数表达式是不错的选择。例如:var add = function (1, 2) { return 2 - 1 };var multiply = function (1, 2) { return 1 * 2};function calculate(fun, a, b) { return fun(a, b);}以上是创建了两个匿名函数。第一个返回两个数的差,第二个返回两个数的积。接着,我们定义了一个函数calculate,它的第一个参数是函数类型,后面两个参数是数值类型。我们可以通过传递任何函数作为第一个参数来调用函数calculate。var sum = calculate(add, 2, 3); // sum = 5var multiplication = calculate(multiply, 2, 3); // multiplication = 6将函数通过参数形式传递是不是很简单. 这种方式在AJAX调用中的使用率极高,比如你传入一个回调函数,当AJAX调用完成后用来处理成功或失败结果.
2、丢失的参数调用一个函数可以传递比预期更多或更少的参数。如果你调用一个方法,少传递了一个参数,那么没传递的那个参数的值会被设为undefined.function callMe(a, b, c) { console.log("c is " + typeof c);}callMe("Code", "Morning"); // Output: "c is undefined"callMe("Learn", "JavaScript", "Functions"); // Output: "c is string"
3、参数对象所有的Javascript函数都有一个特殊的对象arguments 它是一个参数数组,在函数调用过程中被传递. 这个对象可以用来访问参数列表中的单独项,也可以获取参数传递至函数过程中的参数总个数.function callMe() { var i; for (i = 0; i < arguments.length; i++) { console.log(arguments[i]); } console.log("Total arguments passed: " + arguments.length);}这个函数假设没有参数传递进来,就像我说的,在Javascript函数调用中,你可以传递任意数量的参数. 因此我也可以这样调用方法:callMe("Code", "Morning", "Mr. Programmer");// Output":// Code// Morning// Mr. Programmer// Total arguments passed: 3所有的参数都可以在arguments对象数组中找到. 可以使用arguments.length属性获取传递参数的个数.
4、函数嵌套一个函数内部可以包含内部函数. 内部函数又再次可以包含内部函数。来看下代码.function wakeUpAndCode() { function wakeUp() { console.log("I just woke up"); } function code() { console.log("I am ready to code now"); } wakeUp(); code();}wakeUpAndCode();// Output:// I just woke up// I am ready to code nowwakeUpAndCode这个函数包含两个内部函数wakeUp和code. 当调用wakeUpAndCode后, 开始执行方法体. 方法体外只有两条执行语句, 分别调用wakeUp和code. 调用wakeUp函数会在控制台输出字符“I just woke up” . 调用code函数会在控制台输出字符 “I am ready to code now” .内部函数可以访问所有外部函数的变量和参数. 但是内部函数是函数内一种私有类型的实现,它不能被它所在的函数之外的函数访问. 关于使用内部函数与闭包问题将在其他文章讨论.
5、“ 自执行函数表达式 ”(IIFE)IIFE (即时执行函数)是一个声明完成马上执行的匿名函数,它长这样:(function() { // Your awesome code here}());你只需要创建一个匿名函数,在方法定义结尾处加一对圆括号,然后把所有的代码再通过圆括号括起来. 最外层的括号里会把所有内容转化成表达式,因为JavaScript的括号里不能写程序语句. 函数定义后面的一对括号可以让函数立即执行.任何在自执行函数体内定义的变量都是局部有效的,并且不能被任何此作用域之外的代码访问或改变.看下面的代码. 这个函数不需要被调用就会自动执行.(function() { console.log("I run on my own.");}());把代码复制黏贴到plunker然后再浏览器控制台查看输出结果. 如果你不知道怎么打开浏览器控制台, 按F12键就会打开开发者工具. 然后点击console选项卡查看console.log语句的输出内容.IIFE 是一个很好的在代码段中创建局部作用域的方法. 这么做的好处是可以保护你的变量和函数被应用程序中的其他部分复写掉. 那 IIFE 还有什么其他的优势? 还有他们怎么解决全局变量污染问题? 等我下一篇关于自执行表达式的文章.
6、构造函数一稍僚敉视个函数可以作为构造函数使用,并且可以使用构造函数来创建新的对象. 这个特性使Javascript更加面向对象. 使用构造函数的优势是你可以创建很多预定义对象和方法. 想象一下其他语言和对象的特性,他们也是这样的.我们来建立一个Programmer函数,它有函数构造器,并且有属性和方法. 你可以把它当作一个类如果你使用其他语言.function Programmer(name, company, expertise) { this.name = name; this.company = company; this.expertise = expertise; this.writeCode = function() { console.log("Writing some public static thing.."); } this.makeSkypeCall = function() { console.log("Making skype call.."); } this.doSalsa = function() { console.log("I'm a programmer, I can only do Gangnam style.."); } this.canWriteJavaScript = function() { return expertise === "JavaScript"; }}
7、这个函数接收三个参数,并使用三个属性和四个方法来创建一个Programmer对象. 上面的代码不用说了吧没,很简单的. 我可以使用下面的代码创建很多programmer对象.var javaProgrammer = new Programmer("Mohit Srivastava", "Infosys", "Java");var dotnetProgrammer = new Programmer("Atul Mishra", "Prowareness", ".NET");当然也可以使用普通的字面语法来创建具有相同属性和方法的对象, 但我们要很不爽的编写相同的代码很多次. 如果你知道变成中的 DRY(Don't repeat yourself,不要重复造轮子?)原则,你就会明白了. 构造函数可以让你定义一次对象,然后再任何时候实例化他们.