[译]javascript中定义函数的各种方法
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单
源地址在此:
https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b
在Javascript中有很多不同的方法来定义函数.
>用函数声明来定义函数
例子1:声明一个函数,然后再呼出
function addNumbers(firstNumber, secondNumber)
{
var result = firstNumber + secondNumber;
return result;
} var sum = addNumbers(10, 20);
document.write(sum);
Output : 30
例子2:在函数声明之前就呼出它
在例子1中,我们是先声明后呼出的.但是其实Javascript呼出函数可以放在任何地方,甚至是在函数被声明之前就呼出也是ok的.以下的代码是完全没问题的.在以下的例子中,我们在函数声明之前就呼出它
var sum = addNumbers(10, 20);
document.write(sum); function addNumbers(firstNumber, secondNumber)
{
var result = firstNumber + secondNumber;
return result;
}
函数上升(Hoisting):在默认状况下,Javascript会把所有的函数声明移到当前作用域(scope)的最上方,这就叫做函数上升(Hoisting).这就是为啥Javascript函数可以在被声明之前就被呼出.
>用函数表达式来声明函数
一个函数表达式允许我们用一个表达式来定义函数(通常是将其赋给一个变量).有三种不同的方式来使用函数表达式来定义函数.
匿名函数表达式的例子:在这个例子中,我们建立一个没有名字的函数,然后将其赋给一个叫做add的变量.我们用这个变量名来激活(invoke)函数.
var add = function (firstNumber, secondNumber)
{
var result = firstNumber + secondNumber;
return result;
} var sum = add(10, 20);
document.write(sum);
使用函数表达式来定义函数是不会被上升(hoisting)的.所以,这就意味着使用函数表达式定义的函数只能在其被定义后才能呼出.回想如果用普通方式来定义函数的话,无论是在定义前还是定义后呼出都是ok的.
// add() is undefined at this stage
var sum = add(10, 20);
document.write(sum); var add = function (firstNumber, secondNumber)
{
var result = firstNumber + secondNumber;
return result;
}
以上代码则会报错
有名函数表达式例子:和以上匿名函数的例子类似,唯一的区别就是我们将变量赋给有名字的函数
var factorial = function computeFactorial(number)
{
if (number [= 1)
{
return 1;
} return number * computeFactorial(number - 1);
} var result = factorial(5);
document.write(result);
这种格式比较适合用于制造recursive函数,而且这个函数名(computeFactorial)只在其函数内部可用,如果在函数外部使用这个函数名则会报undefined的错
var factorial = function computeFactorial(number)
{
if (number [= 1)
{
return 1;
} return number * computeFactorial(number - 1);
} var result = computeFactorial(5);
document.write(result);
Output : Error - 'computeFactorial' is undefined.
自我激活函数表达式例子:
var result = (function computeFactorial(number)
{
if (number <= 1)
{
return 1;
} return number * computeFactorial(number - 1);
})(5); document.write(result);
Output : 120
这样的写法有很多不同的名字
Immediately-Invoked Function Expression(IIFE)
Self-executing anonymous functions
Self-invoked anonymous functions
[译]javascript中定义函数的各种方法的更多相关文章
- JavaScript中valueOf函数与toString方法
基本上,所有JS数据类型都拥有valueOf和toString这两个方法,null除外.它们俩解决javascript值运算与显示的问题,本文将详细介绍,有需要的朋友可以参考下 JavaScrip ...
- 简要描述 JavaScript 中定义函数的几种方式
JavaScript 中,有三种定义函数的方式: 1.函数语句:即使用 function 关键字显式定义函数.如: function f(x){ return x+1; } 2.函数定义表达式:也称 ...
- JavaScript中定义函数的几种方式
函数的组成:函数名 + 函数体 1.使用function关键字定义函数 -- 具有优先级,优先将function关键字定义的函数优先执行 function functionName(arg0, ar ...
- [译]Javascript中的函数
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- JavaScript中的函数-7---函数的作用,定义,调用
JavaScript中的函数 函数也是对象,并且是javascript中的一等公民,可以用来创建普通对象.对象只是属性和值的集合 学习目标 1.掌握函数的作用 2.掌握函数的定义 3.掌握函数的调用 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- JavaScript中Eval()函数的作用
这一周感觉没什么写的,不过在研究dwz源码的时候有一个eval()的方法不是很了解,分享出来一起学习 -->首先来个最简单的理解 eval可以将字符串生成语句执行,和SQL的exec()类似. ...
- 谈谈javascript 中的函数问题
聊聊javascript中的函数 本文可作为李刚<疯狂htmlcssjavas讲义>的学习笔记 先说一个题外话 前几天在知乎上流传着一个对联 上联是雷锋推到雷峰塔 nnd 这是什么对联? ...
- Javascript中的函数(三)
一:概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质 ...
随机推荐
- LeetCode Minimum Index Sum of Two Lists
原题链接在这里:https://leetcode.com/problems/minimum-index-sum-of-two-lists/description/ 题目: Suppose Andy a ...
- CentOS 7安装Azcopy
Azcopy是Azure存储一个非常好用的工具.本文将介绍如何在CentOS7下安装的过程. 更新:目前需要.net core 2.0版本.具体下载地址大家自己搜索. 1 安装.net core 1. ...
- linux参数之max_map_count
“This file contains the maximum number of memory map areas a process may have. Memory map areas are ...
- Oracle 静默安装oracle client
静默安装oracle clint比较简单,修改instantclient.crsp文件的几个位置即可 [root@localhost ~]# vi /etc/oralnstloc inventory_ ...
- 火星坐标、百度坐标、WGS84坐标转换代码(JS)
JS版本源码 /** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ / ...
- Python类(八)-类的起源
首先用type()看一下类和实例化对象的类型 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" class Person(obj ...
- SUSE eth0 No such device
删除 etc/udev/rules.d/70-persistent-net.rules 文件 之后重启让系统重新生成eth0配置文件 rm -f etc/udev/rules.d/70-persis ...
- Java堆初始大小的建议值
摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...
- jackson 进行json与java对象转换 之一
代码无真相,为了最简单的说明,我直接上代码. public class User { private String name; private Gender gender; private List& ...
- 5-EasyNetQ之Publish(黄亮翻译)
EasyNetQ支持的最简单的消息模式是发布/订阅.这个模式是一个极好的方法用来解耦消息提供者和消费者.消息发布者只要简单的对世界说,"这里有些事发生" 或者 "我现在有 ...