javascript中函数定义

js中函数一般定义如下:

function functionName(arg0,arg1,arg2,...,argN) {

statements;
}
其中functionName是函数名,arg0,…argsN是参数,没有具体类型,可以接受任何类型的参数,例如Boolean,Number,String,Object等。function可以有返回值(返回值可以返回任何类型),也可以没有返回值

来看一个function示例:

function printHello(message) {
alert(message);
}

printHello("helloworld");
将会弹出 helloworld

带返回值的函数

function sum(num1,num2) {
return num1 + num2;
}

alert(sum(2,6));
输出8
这样来看,其实和java中也差别不大,但是关键的是在js中也允许这样的代码存在

alert(sum(2,6));
var res = sum(1);
alert(sum(1,2,3));
var res2 = sum;
alert(sum());
这样一来,和java中相差就很大了。可以看到我们 定义函数是两个参数,但是调用却可以是0个,1个,甚至3个参数。并且函数名还可以赋值给其他变量。这是怎么回事呢?下面讲解。

3 javascript中function注意事项
1 javascript中function的本质

javascript中函数本质上是一个对象,每个函数都是Function的实例,都与其他对象一样有属性和方法。由于函数是对象,因此函数名实际上是指向函数的一个指针,函数名不会与具体的某个函数绑定。

理解以上概念对我们理解javascript中函数非常有用,这些解释了以下代码为什么会执行结果相同

var res2 = sum;
res2(1,2);
sum(1,2)
以上代码结果均是3

javascript中函数与java的异同

个人觉得javascript中函数与java中的主要区别如下:

js中函数是一个对象,函数名是一个指针。java中函数是对象的一个方法,依附于对象,不能独立存在。
java中就不说了,很好理解。js中刚刚已经介绍过了,为了理解js中函数是一个对象,我们可以这样定义sum函数:

var sum = new Function("num1","num2","return num1 + num2");

var sum1 = function (num1,num2) {
return num1 + num2;
};

alert(sum(1,3));
alert(sum1(1,3)) ;
以上两个结果均输出4,可以看到,js中函数确实是一个对象。函数名仅仅是一个指向该函数的指针。

js中函数没有重载,参数没有类型校验,调用可传递0到N个参数
js中函数是一个对象,函数名是一个指针,因此对象没法重载,定义多个相同名字的函数等于将该对象指向多个函数,最终肯定会以最后的定义为准。

function print() {
return "print1";
}

function print(message) {
return "print2";
}

alert(print());
alert(print("ppp"));
结果都是输出print2,可见最终print2函数都是返回print2。
另外,js中可以把没有返回值的函数赋值给某个结果变量,如下:

function noReturn() {
var i = 0;
}

var res = noReturn();
//输出 undefined
alert(res);
输出结果是undefined,如果一个函数没有返回值,被赋值时,默认返回undefined

js中函数内部有两个特殊对象:arguments,this
我们知道js中函数可以传递0到N个参数,那这是怎么回事呢?原因是js总函数的参数是用一个数组来表示的,这个数组就是arguments数组,不论传递的多少个参数,函数始终接受到的参数都是这个数组。可以用数组的形式来访问函数参数。如下:

var sum1 = function (num1,num2) {

//arguments length:2 1 3
console.log("arguments length:" + arguments.length + " " + arguments[0] + " " + arguments[1]);
return num1 + num2;
};

alert(sum1(1,3));
当调用时,我们可以看到控制台输出如下结果:
arguments length:2 1 3

this对象

this的行为与java中类似,它引用的是函数执行的环境对象–也可以说是this值(当在网页全局作用域中调用函数时,this对象引用的是window对象)。请参考下面例子。

window.color = "red";

//创建一个对象o 指明具有color属性
var o = {color:"blue"};

function sayColor() {
console.log(this.color);
}

//red
sayColor();

o.saycolor = sayColor;
//blue
o.saycolor();
可以看到,调用sayColor()是,当前this对象是window对象,当把sayColor赋值给o时,后面this对象指代的就是o对象了。

web Function函数的更多相关文章

  1. JavaScript function函数种类(转)

    转自:http://www.cnblogs.com/polk6/p/3284839.html JavaScript function函数种类 本篇主要介绍普通函数.匿名函数.闭包函数 目录 1. 普通 ...

  2. JavaScript function函数种类介绍

    JavaScript function函数种类介绍 本篇主要介绍普通函数.匿名函数.闭包函数 1.普通函数介绍 1.1 示例 ? 1 2 3 function ShowName(name) {     ...

  3. Serverless Web Function 实践教程(一):快速部署 Node.js Web 服务

    作为目前广受欢迎的 Web 服务开发语言,Node.js 提供了众多支持 HTTP 场景的相关功能,可以说是为 Web 构建而生.因此,基于 Node.js,也诞生了多种 Web 服务框架,它们对 N ...

  4. 关于Function()函数对象的那些小九九

    概念:首先,函数是一种特殊类型的数据,函数也是数据类型的一种,实际上函数也是一种对象,函数对象的内建构造器是Function(); 函数的几种创建方式: 函数声明法: function sum(a,b ...

  5. 【JS学习笔记】关于function函数

    函数的基本格式 function 函数名() { 代码: } 函数的定义和调用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  6. 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR

    Sqlserver 自定义函数 Function使用介绍 前言:         在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...

  7. 创建一个Scalar-valued Function函数来实现LastIndexOf

    昨天有帮助网友解决的个字符串截取的问题,<截取字符串中最后一个中文词语(MS SQL)>http://www.cnblogs.com/insus/p/7883606.html 虽然实现了, ...

  8. Warning -27077: The "vuser_init" section contains web function(s) when the "Simulate a new user on each iteration" Run-Time Setting is ON.

    通过LR来录制登录过程并生成脚本,设置了自动关联,并回放录制脚本,观察回放日志发现没有报error信息,说明脚本没有问题,将脚本放入Controller中设置100个用户设置运行,发现运行一段时间开始 ...

  9. javascript:function 函数声明和函数表达式 详解

    函数声明(缩写为FD)是这样一种函数: 有一个特定的名称 在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中 在进入上下文阶段创建 影响 ...

随机推荐

  1. 20145338 《网络对抗》 MSF基础应用

    20145338<网络对抗> MSF基础应用 实验内容 ·掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路. 具体需要完成(1)一个主动攻击;(2)一个针对浏览器的攻击 ...

  2. 报表工具highcharts使用心得

    公司让做一个报表页面,搜索了下发现highcharts比较符合业务需求,下面就说一下使用心得. $('#container').highcharts({ title: { text: '部门统计图' ...

  3. 模块化 Sea.js(CMD)规范 RequireJS(AMD)规范 的用法

    插入第三方库AMD CMD都 一样  如:JQ(再JQ源码里修改) 使用seajs的步骤 1.HTML里引入seajs <script src="./lib/sea.js"& ...

  4. Docker Toolbox

    Toolbox包含以下Docker工具: 用于运行docker-machine命令的Docker Machine 用于运行docker命令的Docker Engine Docker Compose用于 ...

  5. java虚拟机——监控工具

    本篇记录本人在学习JDK监控工具的一些笔记.JDK是1.8 JPS:查看java的进程命令 左边的数字是进程ID,对应的是进程的名称. jstat:查看运行时状态信息. 1.-class:监控类装载, ...

  6. Mac下安装证书fiddlerRoot.cer

    Step 1: 设置Mac的代理如下 Step 2:打开127.0.0.1:8888,下载fiddlerRoot.cer; Step 3:下载好了,双击安装,但是默认这个证书是不可信的,你需要在钥匙串 ...

  7. 牛客网小a的旅行计划

    地址:https://ac.nowcoder.com/acm/contest/223/B 此题是一道套公式题目,不难,ans=(pow(4,n+1)-4*pow(3,n+1)+6*pow(2,n+1) ...

  8. Thymeleaf前后端传值 页面取值与js取值

    参考: Thymeleaf前后端传值 页面取值与js取值 Thymeleaf 与 Javascript Thymeleaf教程 (十二) 标签内,js中使用表达式 目的: 后端通过Model传值到前端 ...

  9. CVE-2018-19968

    PHPMyAdmin 4.0.0~4.8.3 任意文件包含/远程代码执行漏洞 介绍 本地文件包含(CVE-2018-19968) -至少从4.0.0到4.8.3的phpMyAdmin版本就有一个本地文 ...

  10. jmeter学习随笔

    1.jmeter配置环境是需要注意jdk版本,不同的jdk版本可支持运行不同版本的jmeter,对应关系如下图 2.HTTP请求和HTTP默认请求的区别 若一个项目中会多次调用相同的接口域名及端口号, ...