[译]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中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质 ...
随机推荐
- 洛谷P2706 巧克力
题目背景 王7的生日到了,他的弟弟准备送他巧克力. 题目描述 有一个被分成n*m格的巧克力盒,在(i,j)的位置上有a[i,j]块巧克力.就在送出它的前一天晚上,有老鼠夜袭巧克力盒,某些位置上被洗劫并 ...
- Unity4.6 UGUI 图片打包设置(小图打包成图集 SpritePacker)
版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.liveslives.com/ 在学习UGUI的过程中,一直使用小图也就是散图,一个按钮一个图 ...
- IntellJ IDEA快捷键汇总
今天开始使用IDEA,各种不习惯,一会Eclipse一会IDEA来回切换,需要一个熟悉的过程,记录一下常用的快捷键. IDEA常用快捷键 Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+ ...
- 第五篇 Nginx的简单配置
先安装: sudo apt-get install nginx php5-fpm 我是在新安装的Ubuntu13上测试通过的,真的只安装这两个东西就够了. 然后编辑配置文件. sudo gedit / ...
- phpBB安装
要测试一个网站的安全性,不得不安装一个网站.常用的Hello World!不行了,找了个phpBB安装.非常方便,记录一下安装过程. 下载phpBB 下载地址:http://tianjin.mycod ...
- 引用com.sencha.gxt.ui.GXT加载错误解决方案
环境GWT2.7+GXT4.0 <inherits name='com.sencha.gxt.ui.GXT' /> 出现加载错误 Loading inherited module 'com ...
- HTML5通信
跨文档消息传输 HTML5中提供了在网页文档之间互相接收与发送信息的功能.使用这个功能只要获取到网页所在窗口对象的实例,无论是否同源都可以实现跨域通信.经常用于不同frame之间的通信. 当我们想要接 ...
- L2-002. 链表去重(map结构体,精彩的代码)
链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值 ...
- 通过phpMyAdmin拿webshell
general_log默认为关闭的,root权限开启后,general_log_file会保存所有的查询语句 所以可以开启general_log,然后设置general_log_file为一个php文 ...
- Java中Object.hashCode contract
面试时在这个问题上犯了个错误,只重写了equals方法,而没有覆盖hashCode()方法. 回来重读了Effective Java的Item 9,里面提到Object.hashCode contra ...